我一直想知道的一件事是,我在C ++代码中使用的std::string
实例是否使用相同的分配器,或者它们是否有自己独立的内存池?
显然,在多个频繁创建和销毁的字符串之间共享单个内存池效率更高。有人可以为我确认或否认这个吗?
答案 0 :(得分:10)
默认情况下,它们都使用std::allocator
,它使用标准内存例程来获取空闲堆块。此图层不涉及池。
(但是,大多数堆实现使用专用的低碎片堆来提供小分配,并且字符串最有可能属于此类别。但这是依赖于实现的,而不是std::string
的独占或优化...)。
答案 1 :(得分:2)
如果您没有指定一个,则c ++的不同实例使用相同的分配器。你可能指的是java / python等标准的字符串实习。如果是这样,不。没有“标准”设施。但是,如果频繁创建/销毁是一个问题,则很容易添加