使用int而不是size_t索引来访问向量元素的性能降低了吗?

use*_*020 3 c++ int vector size-t

如果我使用intindex来访问vector元素,它会将整数转换为size_t,然后调用operator[](size_t)函数吗?是否有任何性能下降?

das*_*ght 5

之间的主要区别intsize_tint签署,同时size_t是无符号.另外,两者可以具有不同的大小,因为两种类型都是特定于平台的并且彼此独立.

当两个大小相同时,从intto 转换size_t为no-op,因此没有性能影响.

当尺寸是不同的,该编译器足够聪明来传递的部分或展开的值int索引到operator []服用size_t几乎没有开销,因为缩小尺寸需要一个部分负荷,同时扩大了尺寸需要装载零的上部.但是请注意,为扩展值的上半部分写入零不是附加操作,因为它取代了从size_t类型索引复制上部.

因此,答案是否定的,你不会看到任何性能差异.

  • 我的分析结果与您的分析相矛盾.这不是最新的编译器,所以可能已经改进了一些未定义行为的优化来修复这种效果.缺乏这一点,编译器在许多情况下允许负`int`,因此它签名扩展而不是零扩展,并且在x86_64中,符号扩展的效率远低于零扩展. (2认同)