哪个在C ++中更快:i <= N或i

问题描述 投票:3回答:1

以下两个for循环都将执行N + 1次:

for(int i = 0; i <= N; ++i);
for(int i = 0; i < N + 1; ++i);

两个表达式中的哪一个(i <= N或i <N + 1)计算速度更快?我知道有一个流行的类似问题(Is < faster than <=?),但我认为这是不同的,因为我们在一个变量中加1,可能不是常数,然后将它与i进行比较,而不是将它与常量值进行比较。

c++ performance for-loop
1个回答
5
投票

首先,如果N是常量,编译器会在编译时计算N+1,并为两个选项生成相同数量的指令。在this Q&A中很好地解释了变量与常数比较的情况。

N是一个变量,其值仅在运行时可用时,运行在激进的优化级别的编译器也可以为两个比较生成相同的代码。

我在gcc优化级别上运行了-O3的实验,给出了这两个代码片段:

scanf("%d%d", &j, &k);
if (j < k+1) {
    printf("hello\n");
}

scanf("%d%d", &j, &k);
if (j <= k) {
    printf("hello\n");
}

我使用scanf来阻止编译器完全优化表达式。

两种情况下产生的汇编代码相同:

movl    -8(%rbp), %eax
cmpl    -4(%rbp), %eax
jg      LBB0_2

它将jk进行了比较,当printf大于puts时,跳过了j(优化者用k调用替换)的调用。

© www.soinside.com 2019 - 2024. All rights reserved.