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