使用 int 而不是 size_t 索引来访问向量元素会降低性能吗?
Any performance reduction to use int instead of size_t index to access vector elements?
如果我使用int
索引访问一个向量元素,它会把整数转换成size_t
,然后调用operator[](size_t)
函数吗?有没有性能下降?
这取决于 - size_t
取决于平台。
另请参阅:What's the difference between size_t and int in C++?
int
和size_t
的主要区别在于int
是有符号的,而size_t
是无符号的。另外,两者可能大小不同,因为这两种类型都是平台特定的,相互独立。
当两个大小相同时,从 int
到 size_t
的转换是空操作,因此没有性能影响。
当大小不同时,编译器足够聪明,可以将 int
索引的部分或扩展值传递到 operator []
中,几乎没有开销 size_t
,因为缩小了大小需要部分加载,而扩展大小需要为上部加载零。但是请注意,为扩展值的上部写入零并不是一个额外的操作,因为它 替换 从 size_t
类型的索引复制上部。
因此,答案是否定的,您不会看到任何性能差异。
如果我使用int
索引访问一个向量元素,它会把整数转换成size_t
,然后调用operator[](size_t)
函数吗?有没有性能下降?
这取决于 - size_t
取决于平台。
另请参阅:What's the difference between size_t and int in C++?
int
和size_t
的主要区别在于int
是有符号的,而size_t
是无符号的。另外,两者可能大小不同,因为这两种类型都是平台特定的,相互独立。
当两个大小相同时,从 int
到 size_t
的转换是空操作,因此没有性能影响。
当大小不同时,编译器足够聪明,可以将 int
索引的部分或扩展值传递到 operator []
中,几乎没有开销 size_t
,因为缩小了大小需要部分加载,而扩展大小需要为上部加载零。但是请注意,为扩展值的上部写入零并不是一个额外的操作,因为它 替换 从 size_t
类型的索引复制上部。
因此,答案是否定的,您不会看到任何性能差异。