我正在使用内存映射打开文件。这些文件显然太大(在 32 位 PC 上为 6GB),无法在之前进行映射。所以我正在考虑每次映射它的一部分并在下一个映射中调整偏移量。
每个映射是否有最佳字节数,或者有没有办法确定这样的数字?
谢谢。
我正在使用内存映射打开文件。这些文件显然太大(在 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 视频文件(不愉快,但可行)。