<分区>
我们有一个在 Windows 32 位系统上运行的 C++ 应用程序。一旦内存使用量达到 1.5 GB,它就会崩溃。我们无法理解的是,为什么它会在 1.5 GB 限制而不是 2 GB 限制(虚拟地址空间和 Windows 32 位架构限制)时崩溃?
其他细节:- 可用总内存:4GB
操作系统:Windows XP
1.5 GB 是仅此一个进程使用的内存。
问候,
萨钦
<分区>
我们有一个在 Windows 32 位系统上运行的 C++ 应用程序。一旦内存使用量达到 1.5 GB,它就会崩溃。我们无法理解的是,为什么它会在 1.5 GB 限制而不是 2 GB 限制(虚拟地址空间和 Windows 32 位架构限制)时崩溃?
其他细节:- 可用总内存:4GB
操作系统:Windows XP
1.5 GB 是仅此一个进程使用的内存。
问候,
萨钦
最佳答案
这在 32 位 Windows 下是完全正常的。
除非您激活了/3gb 开关,否则您的总地址空间为 2GB。然而,这还减去映射的可执行文件和至少六个 DLL 和 NLS 文件(对于“hello world”——一个真正的应用程序可能会有更多的一打或两打文件)。
由于它们没有最佳放置,您将损失大约 0.5 GB 的地址空间。堆不会增长到“进入”该区域,因此分配超过 1.5GB 的空间将失败。
“典型程序”的地址空间如下所示:
请注意,一个 DLL 非常巧妙地放置在地址空间的大约 1/3 处,有效地“切断”了您可以使用的三分之一的内存。
关于一旦内存使用量达到 1.5 GB,C++ 应用程序就会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684846/