我的猜测是,在 c89 版本 1 中速度更快,因为 sizeof
是一个编译时运算符,因此我们将与一个常量进行比较。但在c99中,我们可以将sizeof
作为VLA,因此sizeof
是一个运行时运算符。
那么c99中哪一个更快呢?
c89 中哪一个更快?
两者都有一个定义和数组:
#define NUM_ROWS(x) (int) (sizeof(x) / sizeof((x)[0]))
int x[5] = { 0 };
版本 1:
int i;
for (i = 0; i < NUM_ROWS(x); i++) {
// code
}
版本 2:
const int length = NUM_ROWS(x);
int i;
for (i = 0; i < length; i++) {
// code
}
最佳答案
关于更快的唯一正确答案是:测量。
也就是说,在版本 1 中,您在循环的每次迭代中评估并结束条件,而在版本 2 中,您只评估一次。
即使 sizeof 是一个常量,如果编译器可以将常量值直接放入寄存器中以在版本 1 中进行比较,它也可能在版本 2 中执行相同的操作。
因此理论上,版本 2 比版本 1 更快,或者最坏的情况是相同的速度(最有可能用于常量表达式)。
关于c - for 循环比较中什么更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775701/