unique_ptr 比原始指针快吗?C++

爱德华·罗斯托米安

我在这里试验了基准测试,发现了奇怪的结果。
显然创建和删除原始指针比创建慢(当然根据我的测量)unique_ptr,这怎么可能?

struct deleter 
{
    template<typename T>
    void operator()(T* ptr) 
    {
        delete ptr;
    }
};

void BM_rawPtr(benchmark::State& state)
{
    deleter d;
    for (auto _ : state)
    {
        int* p = new int(0);
        d(p);
    }
    state.SetItemsProcessed(state.iterations());
}


void BM_uniquePtr(benchmark::State& state)
{
    deleter d;
    for (auto _ : state)
    {
        std::unique_ptr<int, deleter> ptr(new int(0), d);
    }
    state.SetItemsProcessed(state.iterations());
}

BENCHMARK(BM_rawPtr);
BENCHMARK(BM_uniquePtr);
BENCHMARK_MAIN();

这给了我奇怪的结果:

在此处输入图片说明

我不想说“unique_ptr比原始指针快”之类的废话
显然我在这里错过了一些要点,这是否对任何人敲响了警钟?

提前致谢。

埃罗里卡

unique_ptr 比行指针快吗?

不。

这怎么可能?

基准测试很困难。可以测量由内存布局中的偶然差异引起的差异。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章