0

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

4

4 回答 4

2

这是如何将进程增加到 3GB 的方法;这是 32 位 Windows 应用程序的绝对最大值。除此之外,您将需要使用 64 位版本的 Windows。

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

于 2010-08-10T17:57:57.787 回答
2

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

这是一篇关于虚拟地址空间的好文章,包括已提交与保留。

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

于 2010-08-10T18:03:55.357 回答
1

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

于 2010-08-10T17:38:13.507 回答
0

我没有仔细研究过这个,但你可能会在这里找到你想要的答案:

您可以在 c 或 c++ 中分配一个非常大的单个内存块(> 4GB)吗?

于 2010-08-10T18:03:32.837 回答