我正在努力将文本移植到语音代码以处理QNX(6.6)。一个挑战是尽可能降低RAM消耗,因为我们的高质量语音需要访问大约200 MB的数据(存储在单个文件中)。
我们希望我们可以对这个200 MB的数据进行内存映射,但看起来QNX上的mmap()与其他操作系统的行为不同。我们观察到的是,当一个(4Kbyte?)页面被内存映射时,它永远不会在文件被取消映射之前被释放。由于访问这个200 MB的数据块是相当随机的(取决于输入文本),我们最终会在生成语音的几秒钟内获得完整的200 MB数据。
是否可以确认此行为,如果是,您是否知道是否有其他方式(可能是QNX独有的)将旧页面发布回操作系统(我们必须与其他正在运行的进程一起使用播放器,导航,GUI等)?
第二个观察是内存映射大文件需要几秒钟。这也是意料之外的,因为我认为内存映射的一个优点/目的是将数据的长加载时间跳过RAM。我们使用这行代码来mmap()数据文件:
pFileData = mmap(0, cFileData, PROT_READ, MAP_SHARED, hFile, 0);
我认为PROT_READ和MAP_SHARED没有那么特别,导致映射时间过长(在Linux和iOS上,mmap()会立即返回。)
非常感谢QNX对此内存映射行为的任何见解。