我将这里的代码翻译成C++如下
#include <iostream>
using namespace std;
int t = 20;
bool is_evenly_divisible(const int a, const int b) {
for (int i=2; i<=b; ++i) { // Line 1
if (a%i != 0)
return false;
}
return true;
}
void run() {
int i = 10;
while (!is_evenly_divisible(i, t)) {
i += 2;
}
cout << i << endl;
}
int main(int argc, char** argv) {
run();
return 0;
}
在 Mac OSX 10.8.4 上的编译器 g++ 4.8.1 上使用 -O3 标志,我得到了 0.568 秒的用户时间。
现在如果我将函数 is_evenly_divisible 的第 1 行中的计数器 i 更改为 size_t,时间会突然跳到 1.588s。即使我将所有变量都更改为 size_t,这种情况仍然存在,时间增加到 1.646s
发生了什么?size_t 不应该提高性能而不是降低性能,因为它是比 int 更具体的类型?