簡體   English   中英

使用g ++ -std = c ++ 0x的代碼運行速度較慢

[英]Code running slower with g++ -std=c++0x

我試圖測試std::swapvector::swap的性能差異,並且使用-std=c++0x選項進行編譯。 我注意到大約有200ms的差異,當我不包含此選項時,程序運行速度更快。

#include <iostream>
#include <string>
#include <vector>

int main()
{
    commentator.setReportStream (cout);

    size_t nbElts = 2048;
    vector<int> v, w;

    v.resize (nbElts);
    w.reserve (nbElts);

    for (int i = 0; i < nbElts; ++i) {
        w.push_back (i);
    }

    commentator.start ("std::swap", __FUNCTION__);
    for (int i = 0; i < 10000000; ++i) {
        std::swap (v, w);
    }
    commentator.stop (MSG_DONE);

    commentator.start ("vector::swap", __FUNCTION__);
    for (int i = 0; i < 10000000; ++i) {
        v.swap (w);
    }
    commentator.stop (MSG_DONE);
    return 0;
}

該注釋器對象顯示運行時間。 為什么運行時間不同? gcc版本4.6.3 20120306(Red Hat 4.6.3-2)(GCC)

沒有-std = c ++ 0x的運行時間

std::swap...done (0.319952 s)
Completed activity: std::swap (r: 0.3214s, u: 0.32s, s: 0s) done

vector::swap...done (0.26396 s)
Completed activity: vector::swap (r: 0.2652s, u: 0.264s, s: 0s) done

與-std = c ++ 0x

std::swap...done (0.548917 s)
Completed activity: std::swap (r: 0.5507s, u: 0.5489s, s: 0s) done

vector::swap...done (0.508922 s)
Completed activity: vector::swap (r: 0.5105s, u: 0.5089s, s: 0s) done

好吧,我們不知道您使用的是哪個版本的G ++,也不知道您在編譯時指定了哪些標志。

但是,如果您的代碼花了半秒鍾執行幾百萬個指針交換(在C ++ 0x中交換向量),那么我認為可以很肯定地說您在未啟用優化的情況下進行編譯。 如果您在沒有優化的情況下對代碼進行基准測試,則會得到無用的數據,並且會浪費時間。 如果您關心代碼的速度,請告訴編譯器生成快速代碼, 然后測量差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM