所以我现在正在研究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特定的,并且其他操作系统/设备的行为可能会有所不同。