gpt4 book ai didi

c - for 循环比较中什么更快?

转载 作者:行者123 更新时间:2023-11-30 20:56:13 26 4
gpt4 key购买 nike

我的猜测是,在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com