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