2

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

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

谢谢。

4

2 回答 2

3

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

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

您可以使用诸如 VirtualQuery 之类的 API 来查找最大的连续空间 - 但是当您删除大量地址空间时,您实际上会发生内存不足错误。

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

于 2009-06-23T07:26:33.353 回答
0

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

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

于 2009-06-23T09:04:05.840 回答