C++ TBB分配发出终止信号 846新(prolog.internal\u push\u back\u result())T(项目); 847返回prolog.return_迭代器_和_disease(); 848 } 849

C++ TBB分配发出终止信号 846新(prolog.internal\u push\u back\u result())T(项目); 847返回prolog.return_迭代器_和_disease(); 848 } 849,c++,c++11,new-operator,tbb,sigkill,C++,C++11,New Operator,Tbb,Sigkill,因此,似乎kill信号是通过tbb::concurrent_vector内的分配发出的。但是,无论是的文件,还是的文件,都没有建议采取此类行动 这是否是的未记录行为(宁愿终止正在运行的进程,因为TBB无法适当处理异常)?我如何才能发现并避免这种情况?您可能需要优化算法以使用更少的内存 我不知道macOS如何处理内存分配,但在Linux上,如果使用太多内存,“”将发送SIGKILL信号。@Walter希望您不必完全重新考虑内存分配,相反,在操作系统终止应用程序之前,有一种更简单的方法来捕获失败的新

因此,似乎kill信号是通过
tbb::concurrent_vector
内的分配发出的。但是,无论是的文件,还是的文件,都没有建议采取此类行动


这是否是的未记录行为(宁愿终止正在运行的进程,因为TBB无法适当处理异常)?我如何才能发现并避免这种情况?

您可能需要优化算法以使用更少的内存


我不知道macOS如何处理内存分配,但在Linux上,如果使用太多内存,“”将发送SIGKILL信号。

@Walter希望您不必完全重新考虑内存分配,相反,在操作系统终止应用程序之前,有一种更简单的方法来捕获失败的新内存或处理/释放内存,因为它检测到失控的分配模式(如果实际发生了这种情况)-我现在明白了内存分配是个问题。然而,这不应该导致操作符
new
抛出异常而不是运行时系统杀死进程吗?@Walter没有必要,这就是“过度提交”的含义。基本上,在大多数linux上,您可以毫无问题地分配4TB内存,因为内核不会立即提供物理存储来支持虚拟内存。它基本上是“希望”你不会访问你分配的大部分内存。Macos上的行为似乎并没有被记录下来,但post表明Macos确实过度使用了,就是这样。将这一关键细节整合到向上投票的答案中(目前还不能完全回答这个问题)