按照标准,std::string
重新分配较小字符串的空间时,是否保证不会自动释放已分配的内存?
换句话说:
std::string str = "Some quite long string, which needs a lot of memory";
str = "";
str = "A new quite long but smaller string"; // Guaranteed to not result in a heap allocation?
我问这个问题是因为我依赖它来避免堆碎片。
std::allocator<char>
的对象,但可以更改)来分配和释放内存,分配器可能再次使用较低级别的机制(例如new
和delete
运算符的变体)来实际分配和释放。如果任何一个步骤选择不释放内存到较低级别层,则可能对堆碎片化产生影响。 - Peterstd::string
编写自己的内存控制器的原因。 - Peter VARGA