Skip to content

关于本章

本章讨论C++、C在Dynamic memory management之间的差异。

draft

C++中的dynamic memory management主要是通过newdelete,它们都是operator,是语言内置的,用户无法替换实现,C++标准库提供的Dynamic memory management library,可以实现更加高级的dynamic memory management。

C中的dynamic memory management是通过标准库所提供dynamic memory management library,如mallocfree,显然它们都是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;
    }