ここのコードを次のように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.588 秒に跳ね上がります。これは、すべての変数を size_t に変更しても持続し、時間は 1.646 秒に増加します
何が起こっていますか?size_t は int よりも具体的な型であるため、パフォーマンスを低下させるのではなく、パフォーマンスを向上させるべきではありませんか?