C++应用超过存储器,但并不使用的虚拟存储器
-
27-09-2019 - |
题
我有一个应用程序,分配内存与'新的',并释放与他们"删除"在一些零部件的编码。问题是,每当它超过存储器限制的系统(让我们说2GB),Windows发送一个信号的程序。我认为这是不平常的,因为它应使用交换空间(我认为,在windows它被称为虚拟存储器),对吗?我的程序是用C++编写/Visual Studio.
解决方案
这里是你如何使之达到了3GB一个过程;这是绝对最大值你可以把它的32个Windows应用程序。任何超过这一点,你将需要使用的Windows 64位版本。
这是一个很大的存储器。也许你可以考虑拆分您的应用程序到多个进程和它们之间的通信。
其他提示
在OS不杀你的应用程序,未处理的异常呢。您将要检查使用性能监视器您的应用程序,并观看这些计数器,工作集,虚拟字节,专用字节。您将获得的例外,当你保留字节靠拢到2GB。所以,你的承诺字节和RAM字节要少得多。
在道德的故事,不尝试分配时保留字节变得接近2GB,对于一个32位的过程。
Windows不使用的信号。当你的内存耗尽你应该得到的std :: badalloc例外。其中,未捕获的时候,会自动运行终止()函数。唯一的例外是在输出窗口中可见。
我没有看起来太密切关注这个,但你可以找到答案,你想在这里:
不隶属于 StackOverflow