代码之家  ›  专栏  ›  技术社区  ›  Nima

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

  •  0
  • Nima  · 技术社区  · 16 年前

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

    4 回复  |  直到 16 年前
        1
  •  2
  •   Romain Hippeau    16 年前

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

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

        2
  •  2
  •   Chris O    16 年前

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

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

    这个故事的寓意是,不要试图在保留字节接近2GB时为32位进程分配。

        3
  •  1
  •   Hans Passant    16 年前

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

        4
  •  0
  •   Community Mohan Dere    9 年前

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

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