我正在为 C++ 中内存有限的嵌入式系统(Tegra 2)开发应用程序。我正在处理有时会出现的代码new
和new[]
整个代码的 NULL 结果,但应用程序能够处理这个问题。
问题是如果内存完全耗尽,系统会通过 SIGKILL 杀死进程。我能以某种方式告诉它new
应该只返回 NULL 而不是终止进程吗?
我正在为 C++ 中内存有限的嵌入式系统(Tegra 2)开发应用程序。我正在处理有时会出现的代码new
和new[]
整个代码的 NULL 结果,但应用程序能够处理这个问题。
问题是如果内存完全耗尽,系统会通过 SIGKILL 杀死进程。我能以某种方式告诉它new
应该只返回 NULL 而不是终止进程吗?
我不确定您使用的是哪种操作系统,但您应该检查它是否支持像 Linux 那样的机会性内存分配。
如果启用,可能会发生以下情况(详细信息/解决方案特定于 Linux 内核):
new
ormalloc
从内核获取有效地址。即使没有足够的内存,因为...解决方案:禁用内存过度使用:
echo 2 > /proc/sys/vm/overcommit_memory
有两个想法浮现在脑海。
编写自己的内存分配函数而不是直接依赖new
。您提到您在嵌入式系统上,其中特殊分配器在应用程序中非常常见。您是直接在硬件上运行应用程序,还是在执行/OS 层下的进程中运行?如果是后者,是否提供了用于分配内存的系统 API?
查看 C++ set_new_handler
,看看它是否可以帮助您。new
您可以请求在分配失败时调用特殊函数。也许在该功能中,您可以采取措施来防止任何杀死进程的执行。参考:http ://www.cplusplus.com/reference/std/new/set_new_handler/