0

所以,当我们的高级程序员不在时,我正在标记一个 C++ 测试,第一个问题是这样的:

如果没有编译器优化,哪种方法会运行得更快?

方法一

for(int i = 0; i < 100000; i++) { }

方法二

for(int i = 100000; i >= 0; --i) { }

现在,如果您像我和我遇到的几乎所有其他开发人员一样(现在保存一个),您就会被引导相信前置增量和前置减量运算符 ( ++iand --i) 本质上比后置增量慢& 后减运算符。所以我很自然地选择了Method 2

然而,我们的高级程序员回来告诉我这两个函数将在相同的时间内运行。

认为这都是一些精心策划的笑话,我开始证明他是错的,然后把它搞砸了:

#define ITERATIONS  (1000000000)
clock_t start = clock();
for(int64_t i = 0; i < ITERATIONS; i++)
{}
auto first_clock = clock() - start;

start = clock();
for(int64_t j = ITERATIONS; j > 0; --j)
{}
auto last_clock = clock() - start;

令我惊讶的是:

first_clock = 25333
last_clock =  25277

出于所有意图和目的,这些方法是平等的!

那么,这个神话是从哪里来的呢?它曾经是真的,在新的编译器中变成了假的吗?期待有趣的讨论。:)

4

0 回答 0