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

时间:2014-02-06 07:06:52

标签: c performance pointers pointer-arithmetic

我认为当我们写arr[i](相当于*(arr+i))时会发生内部强制转换。因为i例如可以是shortintlong或这三者中任何一个的无符号变体。

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

粗猜:size_t

2 个答案:

答案 0 :(得分:3)

不太可能对性能产生任何重大影响。在任何情况下,您应始终使用语义正确的类型,而不是尝试对不重要的事情进行过早优化。对于索引,size_t先验正确的最小类型,但是如果您知道正在使用的数组是有界的,那么您可以使用较小的类型。通常你应该使用size_t来保证安全。

答案 1 :(得分:2)

我的回答是保持这个简单,也许你想要typedef类型为你索引

typedef size_t TPtrIdx;

通过这种方式,您可以轻松地将类型转换为您想要的类型,现在或1年后。

关于从/到有符号和无符号类型的转换之间的潜在问题,这是一个好的编译器可以为您处理的事情,例如gcc提供-Wconversion标志,并且总是一件好事启用它。