std :: set需要多少额外内存(如果有的话)才能存储其元素vs.一个std :: vector?

时间:2014-01-30 06:07:17

标签: c++ vector stl set std

它必须依赖于实现,但使用std :: set?

是否存在任何重要的内存开销

编辑:在我的情况下,我有一组std :: string,平均字符串长度为9个字母。

1 个答案:

答案 0 :(得分:5)

std::set实现为二叉树,因此具有左右指针的节点以及数据元素。您可以通过动态内存库函数对这些内容的分配进行舍入。所以是的 - 对于一个或三个机器字的元素,开销将作为比率/百分比“显着”(例如,2个64位指针+一个char可以很容易地舍入到例如32个字节...... 32x开销),从系统/应用程序行为的角度来看可能是也可能不重要。如果您在意,请始终在您自己的系统上进行测量。

对于平均-9-char string s,总体内存使用量不仅取决于您使用set还是vector,还取决于string的使用量的文本将适合任何短字符串优化缓冲区(string对象的内部;如果实现提供了这样的优化),而不是需要分配更多的动态内存来存储文本。