这是在Windows XP上,应用程序是用C ++(VS2010)开发的。
我希望我的应用程序继续分配内存,直到它达到极限而没有任何问题。但如果它分配整个2GB(32位Windows上的最大限制),它会覆盖堆栈空间并最终崩溃。如何避免这种情况? (顺便说一句,我使用malloc
和new
进行内存分配)
出于"私有字节","虚拟字节"和#34;工作集",我相信我应该监控"虚拟字节"。但我对此并不完全确定。 (它是"虚拟字节"或"私有字节"当触及2GB时我们可以确定我们触及了限制?)
如果是"虚拟字节"我必须监控,我不确定_PROCESS_MEMORY_COUNTERS_EX
的哪个字段反映虚拟字节
为了让应用程序运行安全顺畅,我应该留出多少内存? (它只是堆栈大小=线程数x每个线程的堆栈大小还是有更多的东西)
答案 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