SIGKILL在用C++分配内存时

Bla*_*hex 9 c++ memory-management sigkill

我正在为C++中的内存有限的嵌入式系统(Tegra 2)开发应用程序.我处理的NULL结果newnew[]整个有时会发生,但应用程序能够处理这个代码.

问题是如果内存完全耗尽,系统会通过SIGKILL杀死进程.我可以告诉你new应该只返回NULL而不是杀死进程吗?

Bla*_*ack 12

我不确定您使用的是哪种操作系统,但是您应该检查它是否支持像Linux那样的机会内存分配.

如果启用,可能会发生以下情况:

  1. newmalloc从内核获取有效地址.即使没有足够的记忆,因为......
  2. 直到第一次访问的那一刻,内核才真正分配内存.
  3. 如果使用了所有"过度使用"的内存,则操作系统没有机会杀死其中一个涉及的进程.(现在告诉程序没有足够的内存已经太晚了.)在Linux中,这称为Out Of Memory Kill(OOM Kill).这种杀戮会记录在内核消息缓冲区中.

解决方案:禁用内存过量使用: echo 2 > /proc/sys/vm/overcommit_memory

  • 您首先不确定 OP 使用哪种操作系统,最后得到特定于 Linux 的解决方案。最好从一开始就假定 Linux,或者警告该解决方案是特定于 Linux 的。 (3认同)