我在这里试验了基准测试,发现了奇怪的结果。
显然创建和删除原始指针比创建慢(当然根据我的测量)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] 删除。
我来说两句