关于本章
本章讨论C++、C在Dynamic memory management之间的差异。
draft
C++中的dynamic memory management主要是通过new、delete,它们都是operator,是语言内置的,用户无法替换实现,C++标准库提供的Dynamic memory management library,可以实现更加高级的dynamic memory management。
C中的dynamic memory management是通过标准库所提供dynamic memory management library,如malloc、free,显然它们都是function。这样的安排,就给用户提供使用替换方案的机会,比如redis就没有使用C标准库所提供的malloc和free,而是使用的jemalloc库,这在redis中进行了介绍。
new VS malloc
Out of memory 的处理
the C standard function for allocating memory, malloc()
, will return NULL and a well-behaved application should handle this situation. malloc
通过返回值是否为NULL来判断是否分配成功
c++中的new
呢?通过Google c++ new return null
可以得到如下有文章:
1、Why doesn't new in C++ return NULL on failure
2、http://www.cplusplus.com/reference/new/bad_alloc/
3、Will new return NULL in any case?
以下是demo
void alloc_resource(int len) {
try {
/// https://stackoverflow.com/a/2204380
/// initialise memory with new operator in C++
array_p_ = new ElementT[len]();
} catch (std::bad_alloc& ba) {
std::string msg = "bad_alloc caught: " + ba.what();
std::cerr << msg << '\n';
LogError(msg);
std::abort();
}
len_ = len;
}