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

Why does using std::vector<> instead of std::list<> cause an increase in code size?

本文关键字:std gt lt 代码 增加 vector 为什么 list      更新时间:2023-10-16

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

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

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

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

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

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