C++ std :: string的各个实例使用相同的分配器吗?

Gea*_*phy 7 c++ memory-management stl

我一直想知道的一件事是,如果std::string我在C++代码中使用的实例使用相同的分配器,或者它们是否有自己独立的内存池?

显然,跨多个频繁创建和销毁的字符串共享单个内存池更有效.任何人都可以为我确认或否认这一点吗?

Ale*_*ler 10

默认情况下,它们都使用std::allocator,它使用标准内存例程来获取空闲堆块.此图层不涉及池.

(但是,大多数堆实现使用专用的低碎片堆来提供小分配,并且字符串最有可能属于此类别.但这是依赖于实现的,而不是独占或优化std::string的...).