gpt4 book ai didi

c++ - new 失败时是否需要留出一些应急内存?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:21 25 4
gpt4 key购买 nike

假设我有一个使用“new”的函数,我是否需要预留一些应急内存以防“new”失败?如:

static char* emerg_mem = new char[EMERG_MEM_SZ];

FooElement* Foo::createElement()
{
try
{
FooElement* ptr;
ptr = new FooElement();
return ptr;
}
catch(bad_alloc ex)
{
delete[] emerg_mem;
emerg_mem = NULL;
return NULL;
}
}

以便有足够的 (EMERG_MEM_SZ) 剩余内存用于类析构函数等,并优雅地退出程序?

我在 Linux Mint 上使用 GCC,但我想这个问题适用于任何平台。

最佳答案

So that there is enough (EMERG_MEM_SZ) memory remaining for class destructor functions etc, and to gracefully exit the program?

在尝试为析构函数提供这样的内存之前,您应该首先能够论证为什么您的析构函数首先需要分配动态内存的一些原因。这样的要求是关于类设计的严重危险信号。

Is it necessary to put aside some emergency memory when new fails?

不一定。首先,通常可以在不分配任何动态内存的情况下优雅退出。其次,在操作系统保护下运行的程序不一定需要在内存不足等可怕情况下正常终止。


附言某些系统(特别是 Linux,给定特定配置)“过度使用”内存并且从不抛出 std::bad_alloc。相反,分配总是成功的,物理内存在实际访问之前不会分配,如果当时没有内存可用,则进程(或其他一些进程)将被杀死以释放一些内存。在这样的系统上,C++ 无法从内存不足中恢复。

关于c++ - new 失败时是否需要留出一些应急内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52483810/

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