尝试分配最大可能的内存来处理

时间:2014-06-16 14:33:23

标签: c++ c memory memory-management

这是在Windows XP上,应用程序是用C ++(VS2010)开发的。

我希望我的应用程序继续分配内存,直到它达到极限而没有任何问题。但如果它分配整个2GB(32位Windows上的最大限制),它会覆盖堆栈空间并最终崩溃。如何避免这种情况? (顺便说一句,我使用mallocnew进行内存分配)

  1. 出于"私有字节","虚拟字节"和#34;工作集",我相信我应该监控"虚拟字节"。但我对此并不完全确定。 (它是"虚拟字节"或"私有字节"当触及2GB时我们可以确定我们触及了限制?)

  2. 如果是"虚拟字节"我必须监控,我不确定_PROCESS_MEMORY_COUNTERS_EX的哪个字段反映虚拟字节

  3. 为了让应用程序运行安全顺畅,我应该留出多少内存? (它只是堆栈大小=线程数x每个线程的堆栈大小还是有更多的东西)

2 个答案:

答案 0 :(得分:0)

程序管理员将为您的堆栈和其他数据留出空间。您可以调用malloc和new,直到它们返回0(NULL)。我认为工作集是你需要监控的变量。

答案 1 :(得分:0)

您可以通过修改boot.ini文件来访问最多3Gb

[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS 
[operating systems] 
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /3GB

然后您需要使用editbin修改您的可执行文件(同时附带快速版本)

editbin /LARGEADDRESSAWARE xxx.exe

这对我有用。如果这不起作用,则缺少可选标头。我不知道你是怎么强迫标题在那里的。

如果你有很多时间 - 这是长篇故事http://www.dansdata.com/askdan00015.htm