64 位进程中的 CreateFileMapping 大小限制
CreateFileMapping size limit in a 64-bit process
文件映射对象有大小限制吗?我问的原因是在 MSDN 的某个地方提到了 2GB 的限制(丢失轨道..)我还检查了这个示例,它也需要 2GB 的大小限制:
但是我在最新的 Win 10 上尝试了一个 40GB 的文件,没有问题,所以我有点担心,例如旧的 Windows 没有一些限制。
文件映射没有 2GB 的限制。您可以使用 3GB 选项启动 32 位 Windows,或者当 32 位进程 运行 在 64 位系统上运行时,如果设置了正确的 PE flag,您将获得完整的 4GB .所有这些限制都是理论上的,您在实践中永远无法达到它们。
您可以映射多大的视图取决于两件事;
- 您的进程地址中的连续空闲地址范围 space。
- 用于跟踪内存页面的可用内核内存。
第一个是 32 位系统的大限制,因为您进程的地址 space 与系统库、第 3 方库(anti-virus、注入的“调整”工具共享等)、PEB 和 TEB、系统区域、线程堆栈和硬件保留的内存。这通常会使您的空间远低于 2GB。任何需要超过 500MB 的设计都应该更改为仅根据需要在特定的较小范围内映射。
For a 64-bit process on 64-bit Windows, the virtual address space is the 128-terabyte range 0x000'00000000 through 0x7FFF'FFFFFFFF (KB889654 claims 8 TB but that only applies to < Windows 8.1)。任何可用范围都会变小,但您可以假设至少有几个 TB。 40GB 没问题,也不足以 运行 解决系统资源不足的问题。
文件映射对象有大小限制吗?我问的原因是在 MSDN 的某个地方提到了 2GB 的限制(丢失轨道..)我还检查了这个示例,它也需要 2GB 的大小限制:
但是我在最新的 Win 10 上尝试了一个 40GB 的文件,没有问题,所以我有点担心,例如旧的 Windows 没有一些限制。
文件映射没有 2GB 的限制。您可以使用 3GB 选项启动 32 位 Windows,或者当 32 位进程 运行 在 64 位系统上运行时,如果设置了正确的 PE flag,您将获得完整的 4GB .所有这些限制都是理论上的,您在实践中永远无法达到它们。
您可以映射多大的视图取决于两件事;
- 您的进程地址中的连续空闲地址范围 space。
- 用于跟踪内存页面的可用内核内存。
第一个是 32 位系统的大限制,因为您进程的地址 space 与系统库、第 3 方库(anti-virus、注入的“调整”工具共享等)、PEB 和 TEB、系统区域、线程堆栈和硬件保留的内存。这通常会使您的空间远低于 2GB。任何需要超过 500MB 的设计都应该更改为仅根据需要在特定的较小范围内映射。
For a 64-bit process on 64-bit Windows, the virtual address space is the 128-terabyte range 0x000'00000000 through 0x7FFF'FFFFFFFF (KB889654 claims 8 TB but that only applies to < Windows 8.1)。任何可用范围都会变小,但您可以假设至少有几个 TB。 40GB 没问题,也不足以 运行 解决系统资源不足的问题。