c++;高内存使用率应用程序 我正在运行一个内存密集型C++应用程序,它被内核杀死,内存占用过大。我原以为当ram满时,操作系统会自动使用交换。然而,我认为我的交换空间没有得到利用

c++;高内存使用率应用程序 我正在运行一个内存密集型C++应用程序,它被内核杀死,内存占用过大。我原以为当ram满时,操作系统会自动使用交换。然而,我认为我的交换空间没有得到利用,c++,memory-management,C++,Memory Management,我已经阅读了以下两个问题,但我无法将其与我的问题联系起来 “” 如果有人能给我一些如何解决这个问题的提示/指点,我将不胜感激。谢谢 编辑:我正在64位机器linux机器上运行我的应用程序。我的ram和交换空间分别为6gb和12gb。也许您有(虚拟)内存框架,并且正在尝试分配一个操作系统无法作为连续块找到的大内存块? 例如,数组需要这样做,但如果在堆上创建一个大型链表,则应该能够分配非连续内存 您试图分配多少内存以及如何分配,您是否有足够的可用资源?如果调试应用程序,进程被终止时会发生什么情况?

我已经阅读了以下两个问题,但我无法将其与我的问题联系起来

“”

如果有人能给我一些如何解决这个问题的提示/指点,我将不胜感激。谢谢

编辑:我正在64位机器linux机器上运行我的应用程序。我的ram和交换空间分别为6gb和12gb。

也许您有(虚拟)内存框架,并且正在尝试分配一个操作系统无法作为连续块找到的大内存块? 例如,数组需要这样做,但如果在堆上创建一个大型链表,则应该能够分配非连续内存


您试图分配多少内存以及如何分配,您是否有足够的可用资源?如果调试应用程序,进程被终止时会发生什么情况?

我怀疑您的进程要求的内存超过可用内存。在您知道要使用所需内存的情况下,您需要禁用内存过度使用:

echo 2 > /proc/sys/vm/overcommit_memory
和/或

vm.overcommit_memory=2
在/etc/sysctl.conf中,这样设置在重新启动后仍然有效


如果您的进程在具有16 GB RAM+交换的计算机上请求32 GB RAM,您的
malloc()
(或
new
…)调用很可能会成功,但一旦您尝试使用该内存,您的进程将被终止。

您的应用程序是32位还是64位?抱歉,忘了提一下…它是64位的。在说“我不认为使用了交换”或者甚至发帖问之前,你有没有检查过你的程序在死机时使用了多少内存?如果有人能给我一些提示/指点,告诉我如何解决这个问题,我将不胜感激。非常不清楚:您是否试图找出导致应用程序关闭的代码?您是否试图更改/管理系统使用交换空间的方式?您是否在问如何以不同的方式编写应用程序?应用程序可能会对内存做一些可笑的事情(比如试图分配
std::numeric\u limits::max()
bytes),在这种情况下,如何更改交换空间使用率无关紧要。对于解决方案,您期待的方向是什么?了解如何使用-在使用调试信息编译应用程序后
g++-g-Wall-Wextra
需要有意识地分割64位地址空间。啊,现在我明白了,在我编写应用程序时,添加了一些关于该应用程序位的注释。