gpt4 book ai didi

c++ - std::set_new_handler 如何提供更多可用内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:21 26 4
gpt4 key购买 nike

来自 std::set_new_handler

new-handler 函数是分配函数在内存分配尝试失败时调用的函数。它的预期目的是三件事之一:

  • 提供更多可用内存
  • 终止程序(例如通过调用 std::terminate)
  • 抛出类型为 std::bad_alloc 或派生自 std::bad_alloc 的异常

下面的重载能保证什么吗?

void * operator new(std::size_t size) throw(std::bad_alloc){
while(true) {
void* pMem = malloc(size);
if(pMem)
return pMem;

std::new_handler Handler = std::set_new_handler(0);
std::set_new_handler(Handler);

if(Handler)
(*Handler)();
else
throw bad_alloc();
}
}

最佳答案

std::set_new_handler 不会使内存可用,它会设置一个新的处理程序函数以在分配失败时使用。

用户定义的新处理程序函数可能能够提供更多内存,例如通过清除内存中的缓存,或销毁一些不再需要的对象。默认的 new-handler 不这样做,它是一个空指针,所以分配内存失败只会抛出一个异常,因为标准库无法知道程序中的哪些对象可能不再需要了。如果您编写自己的新处理程序,您可能能够根据您对程序及其要求的了解将一些内存返回给系统。

关于c++ - std::set_new_handler 如何提供更多可用内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945537/

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