为什么std :: bad_alloc可能最终没有被抓住?

时间:2015-03-23 16:50:49

标签: c++ ios macos new-operator bad-alloc

所以我现在正在研究std::bad_alloc及其行为,以及我不理解的事情。

这个非常简单的片段:

try { 
    char* p = new char[10000000000ul];
} catch(std::bad_alloc& e) {
    std::cout << "Caught a bad alloc" << std::endl;
}

可以使用8GB内存并且不会使用我的MacBook。如果我理解正确,在读了about it}之后,它表明OSX可能完全接受将这个内存量分配为虚拟内存,虽然这意味着很多寻呼问题,在RAM和HDD之间切换页面。

现在,如果我在一台简单的iOS应用程序中使用1GB内存在我的iPad上执行此操作,我会得到:

  

malloc:*** mach_vm_map(size = 10000007168)失败(错误代码= 3)

     

***错误:无法分配区域

     

***在malloc_error_break中设置断点以进行调试

     

libc ++ abi.dylib:以std :: bad_alloc类型的未捕获异常终止

我认为iOS对内存量不满意,只是拒绝分配它。然后,我理解std::bad_alloc是一个严重的错误,但究竟是什么原因导致它不会被捕到?

我认为答案可能是iOS / OSX特定的,并且其他操作系统/设备的行为可能会有所不同。

0 个答案:

没有答案