每次文件太大而无法一次进行内存映射时,建议的字节数是多少?

StackOverflow https://stackoverflow.com/questions/1031073

  •  06-07-2019
  •  | 
  •  

我正在使用内存映射打开文件。这些文件显然太大了(在32位PC上为6GB)要在一个前面映射。所以我想考虑每次映射它的一部分并在下一个映射中调整偏移量。

每个映射是否有最佳字节数,或者有没有办法确定这样的数字?

感谢。

有帮助吗?

解决方案

没有最佳尺寸。使用32位进程,总共只有4 GB的地址空间,通常只有2 GB可用于用户模式进程。然后,这个2 GB由来自exe和DLL,堆分配,线程堆栈等的代码和数据进行分段。鉴于此,您可能找不到超过1 GB的连续空间来将文件映射到内存中。

最佳数量取决于您的应用,但我担心将超过512 MB的映射到32位进程。即使将自己限制在512 MB,您也可能会遇到一些问题,具体取决于您的应用程序。或者,如果您可以使用64位,则应该没有问题将多个千兆字节的文件映射到内存中 - 您的地址空间太大,这不应该导致任何问题。

您可以使用像VirtualQuery这样的API来查找最大的空间 - 但是当您删除大量地址空间时,实际上会强制出现内存不足错误。

编辑:我刚刚意识到我的答案是针对Windows的,但是你没有在讨论哪个平台。我认为其他平台对内存映射文件有类似的限制因素。

其他提示

文件是否需要进行内存映射?

我在733Mhz PIII上编辑了8gb视频文件(不愉快,但可行)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top