记忆功能的性能取决于目标对象分配的类型?

时间:2016-07-14 09:41:28

标签: c++ memory performance-testing

当我们测量C ++标准memcpy函数(Visual Studio 2015)的性能时,我们观察到的差别取决于要复制的对象是从全局(在main()函数之外)还是在堆上分配的? 。对于全局对象,性能似乎更好。对此有何解释?

对于性能测试,我使用了chrono库。

我的测试函数(nTest = 5,nOp = 100.000,mySourceArray和myDestArray是char数组,arraySize = 1.000.000):

void std_memcpy_aligned(std::string testDescr, int nTest, int nOp, char mySourceArray[], char myDestArray[],const int arraySize)
    {
        std::cout << "Performance test: " << testDescr << '\n' << "number of operations/run: " << nOp << '\n';

        for (int i = 0; i < nTest; ++i) {
            //Measure performance
            auto begin = std::chrono::high_resolution_clock::now(); //start time
            for (int ii = 0; ii < nOp; ++ii) {
                memcpy(myDestArray, mySourceArray, arraySize);//aligned source and aligned target address
            }
            auto end = std::chrono::high_resolution_clock::now(); //end time
            std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() << "ms" << '\n';
        }
    }

使用全局对象与堆上对象的测试之间的差异大约为5%。

  

详细说明:n = 10次测试运行,“堆积”测试:8513 ms +/- 114 ms(平均值+/-   sd),“全局”测试:8113 ms +/- 52 ms(平均值+/- sd),结果很高   具有统计学意义

0 个答案:

没有答案