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

时间:2011-03-09 23:06:05

标签: c++ stl memory-management

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

显然,在多个频繁创建和销毁的字符串之间共享单个内存池效率更高。有人可以为我确认或否认这个吗?

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:2)

如果您没有指定一个,则c ++的不同实例使用相同的分配器。你可能指的是java / python等标准的字符串实习。如果是这样,不。没有“标准”设施。但是,如果频繁创建/销毁是一个问题,则很容易添加

http://en.wikipedia.org/wiki/String_interning