为什么使用-Ofast标记的相同代码在g ++中占用太长时间

时间:2016-06-04 07:11:54

标签: c++ g++ c++14 clang++

我已经实现了Sieve of Eratosthenes来查找C ++中的素数。 这是我的代码

#include <bits/stdc++.h>

using namespace std;
const int SZ = 12345678;
vector<int> prime;

bool sieve() {
    bitset<SZ> is_prime;
    int limit = int(1e6) + 7;
    for(int i = 3; i < limit; i += 2) {
        if(!is_prime[i]) {
            prime.push_back(i);
            for(int j = i + i; j < limit; j += i)
                is_prime[j] = true;
        }
    }
    return true;
}

int main(void) {

    clock_t start = clock();
    sieve();
    long long count = 0;
    for(auto it = prime.begin(); it != prime.end(); ++it)
        ++count;
    cout << count << endl;
    clock_t end = clock();

    cout << "Time taken: " << (double)(end - start) * 1000 / CLOCKS_PER_SEC << endl;

    return 0;
}

当我使用clang++-3.6 main.cpp -Ofast -std=c++14在代码上运行时,编译的二进制文件大约需要6秒才能运行,而使用g++ main.cpp -Ofast -std=c++14编译的二进制文件编译时,相同的代码运行大约需要54秒。

screenshot

0 个答案:

没有答案