gpt4 book ai didi

c++ - 在 C++ 中分配内存时发出 SIGKILL

转载 作者:可可西里 更新时间:2023-11-01 16:34:43 25 4
gpt4 key购买 nike

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

问题是如果内存完全耗尽,系统会通过 SIGKILL 杀死进程。我能以某种方式告诉 new 应该只返回 NULL 而不是终止进程吗?

最佳答案

我不确定您使用的是哪种操作系统,但您应该检查是否它支持opportunistic memory allocation就像 Linux 一样。

如果启用,可能会出现以下情况(详情/解决方案特定于 Linux 内核):

  1. 您的newmalloc 从内核中获取了一个有效地址。 即使内存不够,因为...
  2. 内核直到第一次访问的那一刻才真正分配内存。
  3. 如果使用了所有“过量使用”的内存,操作系统就没有机会,只能杀死其中一个相关进程。 (现在告诉程序内存不足已经来不及了。)在 Linux 中,这称为 Out Of Memory Kill (OOM Kill)。 .这样的杀戮会记录在内核消息缓冲区中。

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

关于c++ - 在 C++ 中分配内存时发出 SIGKILL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11779042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com