C++标准库中的内存分配
Memory allocation in the C++ standard library
最近,我对跟踪内存分配和释放产生了兴趣。在重载 new 和 delete 操作符时,我发现 C++ 标准库有时会调用重载的操作符,有时会使用其他方法分配内存。 (大概是std::allocator
。)比如std::string
好像不用new
。虽然,std::vector
似乎在调用 push_back
时调用了 new
。这是令人惊讶的,因为我认为标准库会有统一的策略来管理内存分配。
标准库什么时候选择new
vs std::allocator
?为什么?
标准容器将使用提供给它们的分配器来分配动态内存。默认情况下,即 std::allocator
.
对于标准库中的大多数其他动态内存使用,标准没有指定实现应如何获取内存,并且实现可以自由地做他们想做的事。
至于跟踪内存分配,我建议包装 malloc
。
最近,我对跟踪内存分配和释放产生了兴趣。在重载 new 和 delete 操作符时,我发现 C++ 标准库有时会调用重载的操作符,有时会使用其他方法分配内存。 (大概是std::allocator
。)比如std::string
好像不用new
。虽然,std::vector
似乎在调用 push_back
时调用了 new
。这是令人惊讶的,因为我认为标准库会有统一的策略来管理内存分配。
标准库什么时候选择new
vs std::allocator
?为什么?
标准容器将使用提供给它们的分配器来分配动态内存。默认情况下,即 std::allocator
.
对于标准库中的大多数其他动态内存使用,标准没有指定实现应如何获取内存,并且实现可以自由地做他们想做的事。
至于跟踪内存分配,我建议包装 malloc
。