我有一个应用程序,分配内存与'新的',并释放与他们"删除"在一些零部件的编码。问题是,每当它超过存储器限制的系统(让我们说2GB),Windows发送一个信号的程序。我认为这是不平常的,因为它应使用交换空间(我认为,在windows它被称为虚拟存储器),对吗?我的程序是用C++编写/Visual Studio.

有帮助吗?

解决方案

这里是你如何使之达到了3GB一个过程;这是绝对最大值你可以把它的32个Windows应用程序。任何超过这一点,你将需要使用的Windows 64位版本。

这是一个很大的存储器。也许你可以考虑拆分您的应用程序到多个进程和它们之间的通信。

其他提示

在OS不杀你的应用程序,未处理的异常呢。您将要检查使用性能监视器您的应用程序,并观看这些计数器,工作集,虚拟字节,专用字节。您将获得的例外,当你保留字节靠拢到2GB。所以,你的承诺字节和RAM字节要少得多。

这里是一个虚拟地址空间,包括一个漂亮的文章致力于VS保留。

在道德的故事,不尝试分配时保留字节变得接近2GB,对于一个32位的过程。

Windows不使用的信号。当你的内存耗尽你应该得到的std :: badalloc例外。其中,未捕获的时候,会自动运行终止()函数。唯一的例外是在输出窗口中可见。

我没有看起来太密切关注这个,但你可以找到答案,你想在这里:

你可以分配一个非常大的单个区块的存储器(>4G)中的c或c++?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top