C ++应用程序超过内存但不使用虚拟内存

时间:2010-08-10 17:36:37

标签: c++ windows visual-studio memory-management virtual-memory

我有一个应用程序,它使用'new'分配内存,并在代码的某些部分使用'delete'释放它们。 问题是,只要它超过系统的内存限制(假设为2GB),Windows就会向进程发送一个Kill信号。 我认为这是不常见的,因为它应该使用交换空间(我认为在Windows中它被称为虚拟内存),对吧? 我的应用程序是用C ++ / Visual Studio编写的。

4 个答案:

答案 0 :(得分:2)

Here is how you can make it up to 3GB for a process;这是32位Windows应用程序的绝对最大值。除此之外,您将需要使用64位版本的Windows。

这是很多记忆。也许您可以考虑将您的应用分成多个流程并在它们之间进行通信。

答案 1 :(得分:2)

操作系统不会杀死你的应用程序,未处理的例外会这样做。您将需要使用perfmon检查您的应用程序,并观察这些计数器,工作集,虚拟字节,私有字节。当您的保留字节接近2GB时,您将获得异常。所以你提交的字节和RAM字节要少得多。

Here is a nice article on Virtual Address Space, including committed vs reserved.

故事的寓意,对于32位进程,不要尝试在保留字节接近2GB时进行分配。

答案 2 :(得分:1)

Windows不使用信号。当内存不足时,你应该得到std :: badalloc异常。当未被捕获时,将自动运行terminate()函数。例外情况在“输出”窗口中可见。

答案 3 :(得分:0)

我没有仔细看过这个,但你可以在这里找到你想要的答案:

Can you allocate a very large single chunk of memory ( > 4GB ) in c or c++?