为什么使用std :: vector<>而不是std :: list<>导致代码大小增加?

时间:2012-08-11 12:01:01

标签: c++ stl

在工作中的项目中使用了很多std :: list和std :: vector。由于很少需要随机插入,我开始将std :: lists更改为std :: vectors。但是每次切换时,结果代码大小都会增加(不是固定数量,而是平均大约1kB)。鉴于已经使用了std :: vector,我不明白为什么将std :: list切换到std :: vector会增加代码大小。有什么想法吗?使用的编译器是g ++。

4 个答案:

答案 0 :(得分:2)

也许您添加了一个新类型的向量(例如,在您使用的原始代码vector<int>中,现在添加了vector<string>:它们是不同的类型,因此代码大小将增加到包括新型)。

答案 1 :(得分:0)

这是处于调试模式吗?如果是,则可以使用内联范围检查代码来增加代码大小。请注意,对于列表而言,这不是必需的,您只需要检查下一个节点是否为空。

答案 2 :(得分:0)

好的,没有进一步的细节我们只能猜测。

向量存储器是连续的(由标准保证),但列表存储器不是。因此,可能是编译器能够更好地矢量化和展开基于矢量的代码,这会导致更大的指令和更长的二进制代码。

答案 3 :(得分:-1)

std :: vector包含的功能和代码多于列表(列表中没有随机访问)