提问人:sophistcxf 提问时间:11/3/2023 更新时间:11/3/2023 访问量:123
“std::size_t huge = static_cast<std::size_t>(-1); ::operator new(huge);” 在 throw_std_bad_alloc 中解决了什么问题?
what problem does "std::size_t huge = static_cast<std::size_t>(-1); ::operator new(huge);" solve in throw_std_bad_alloc?
问:
为什么这样写这段代码,要解决什么问题?
“::operator new(huge);”似乎会导致内存泄漏。
EIGEN_DEVICE_FUNC
inline void throw_std_bad_alloc()
{
#ifdef EIGEN_EXCEPTIONS
throw std::bad_alloc();
#else
std::size_t huge = static_cast<std::size_t>(-1);
::operator new(huge);
#endif
}
答:
8赞
Ted Lyngmo
11/3/2023
#1
该函数被设置为在内存分配失败时引发异常或执行任何操作。
如果定义,它将抛出一个正常值,但在另一种情况下,它将尝试分配字节(这就是结果),假设它总是失败,因此不会有泄漏。如果异常被关闭,它很可能是程序。EIGEN_EXCEPTIONS
std::bad_alloc
std::numeric_limits<std::size_t>::max()
static_cast<std::size_t>(-1)
abort()
下一个:特征C++库认证
评论
static_cast<std::size_t>(-1)
throw_std_bad_alloc()
对我来说听起来不言自明。据推测,当异常被禁用时,无效调用会以某种方式终止程序。operator new
throw std:bad_alloc();
new
bad_alloc