“std::size_t巨大= static_cast<std::size_t>(-1);::operator new(huge);”有什么问题 在 throw_std_bad_alloc 中解决?

sop*_*cxf 3 c++ eigen

这段代码为什么这么写\xef\xbc\x8c是为了解决什么问题呢?

\n

“::运算符新(巨大);” 似乎导致内存泄漏。

\n
EIGEN_DEVICE_FUNC \ninline void throw_std_bad_alloc()\n{\n  #ifdef EIGEN_EXCEPTIONS\n    throw std::bad_alloc();\n  #else\n    std::size_t huge = static_cast<std::size_t>(-1);\n    ::operator new(huge);\n  #endif\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

Ted*_*gmo 9

该函数被设计为抛出异常或在内存分配失败时执行任何操作。

如果EIGEN_EXCEPTIONS定义了,它将抛出一个正常的异常,std::bad_alloc但在其他情况下,它将尝试进行字节分配std::numeric_limits<std::size_t>::max()(这就是static_cast<std::size_t>(-1)结果),假设分配总是失败,因此不会发生泄漏。如果异常被关闭,它很可能会被abort()程序关闭。