Why do std::string operations perform poorly?

后端 未结 12 1613
误落风尘
误落风尘 2020-12-22 23:43

I made a test to compare string operations in several languages for choosing a language for the server-side application. The results seemed normal until I finally tried C++,

12条回答
  •  离开以前
    2020-12-23 00:16

    As mentioned by sbi, the test case is dominated by the search operation. I was curious how fast the text allocation compares between C++ and Javascript.

    System: Raspberry Pi 2, g++ 4.6.3, node v0.12.0, g++ -std=c++0x -O2 perf.cpp

    C++ : 770ms

    C++ without reserve: 1196ms

    Javascript: 2310ms

    C++

    #include 
    #include 
    #include 
    using namespace std;
    using namespace std::chrono;
    
    void test()
    {
        high_resolution_clock::time_point t1 = high_resolution_clock::now();
        int x = 0;
        int limit = 1024 * 1024 * 100;
        string s("");
        s.reserve(1024 * 1024 * 101);
        for(int i=0; s.size()< limit; i++){
            s += "SUPER NICE TEST TEXT";
        }
    
        high_resolution_clock::time_point t2 = high_resolution_clock::now();
        auto duration = std::chrono::duration_cast( t2 - t1 ).count();
        cout << duration << endl;
    }
    
    int main()
    {
        test();
    }
    

    JavaScript

    function test()
    {
        var time = process.hrtime();
        var x = "";
        var limit = 1024 * 1024 * 100;
        for(var i=0; x.length < limit; i++){
            x += "SUPER NICE TEST TEXT";
        }
    
        var diff = process.hrtime(time);
        console.log('benchmark took %d ms', diff[0] * 1e3 + diff[1] / 1e6 );
    }
    
    test();
    

提交回复
热议问题