一旦内存使用量达到 1.5 GB,C++ 应用程序就会崩溃

标签 c++ windows

<分区>

我们有一个在 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 的空间将失败。

“典型程序”的地址空间如下所示:

enter image description here

请注意,一个 DLL 非常巧妙地放置在地址空间的大约 1/3 处,有效地“切断”了您可以使用的三分之一的内存。

关于一旦内存使用量达到 1.5 GB,C++ 应用程序就会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684846/

相关文章:

C++ - 返回 const unique_ptr

c++使用冒泡排序自定义排序 vector

c++ - 对于 SparseMatrix 实现,我们能做的最好的是什么?

c++ - 交换链表中的两个节点

windows - Windows 10上的USB-MIDI驱动程序

c++ - Windows、Linux 和内存管理

windows - "COM"、 "USB"、 "Serial Port"有什么区别?

c++ - 如何在单独的线程中创建带有进度条的 MFC 对话框?

c++ - 如何使用 LowLevelKeyboardProc 在 C++ 中重新映射键盘键?

java - 使用Java将同一目录中的文件重命名为大写