c中最有效的指针算术类型

mak*_*ghi 14 c performance pointers pointer-arithmetic

我假设当我们写:(arr[i]相当于*(arr+i))时会发生内部强制转换.因为i例如可以是一个short,intlong或任何这些三个无符号的变体.

所以我的问题很简单:哪种类型应该i不会发生内部转换?这样代码可以最有效地运行?

粗猜:size_t

R..*_*R.. 3

它不太可能对性能产生任何重大影响。无论如何,您应该始终使用语义上正确的类型,而不是试图对不重要的事情进行过早的优化。就索引而言,是先验size_t正确的最小类型,但如果您知道正在使用的数组是有界的,则可以使用较小的类型。通常情况下,为了安全起见,你应该使用它。size_t

  • @user2357112 `ptrdiff_t` 已签名,应该避免。 (2认同)