用于字符串的容量值

dre*_*lax 13 c++ string capacity allocator

在C++标准库中,std::string有一个公共成员函数capacity(),它返回内部分配存储的大小,一个大于或等于字符串中字符数的值(根据此处).这个值可以用于什么?它与自定义分配器有关吗?

Mar*_*tos 10

你更可能使用reserve()成员函数,它设置的能力,至少提供的值.

capacity()成员函数本身可能被用于避免分配内存.例如,您可以通过池回收使用过的字符串,并根据其容量将每个字符串放在不同大小的存储桶中.然后,池的客户端可以请求已经具有一些最小容量的字符串.

  • 它当然不常见,因为很少有应用程序具有如此苛刻的性能需求.此外,它更多的是避免malloc-thrashing而不是内存约束,特别是在大量并发的应用程序中,当它们过于频繁地操作堆时会遭受性能损失. (3认同)

Vik*_*ehr 6

string::capacity()函数std::string在必须重新分配内存之前返回可能包含的总字符数,这是一项非常昂贵的操作.

A std::vector以相同的方式工作,所以我建议你在std::vector 这里查看分配和初始化内存之间差异的详细解释.

更新

嗯,我可以看到我误解了这个问题,实际上我认为我从未在std :: string或std :: vector上使用过capacity(),似乎很少有任何理由,因为你还是要调用reserve.