0

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

4

4 回答 4

2

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

于 2012-08-11T12:21:23.933 回答
0

好吧,没有更多细节,我们只能猜测。

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

于 2013-01-16T09:25:33.727 回答
0

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

于 2012-08-11T12:10:54.397 回答
-1

std::vector 包含比列表更多的函数和代码(列表中没有随机访问)

于 2012-08-11T12:06:17.190 回答