unique_ptr 比原始指针快吗? C++
Is unique_ptr faster than raw pointer? 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
比原始指针快”这样的废话。
显然我在这里漏掉了一些要点,这对任何人来说都是警钟吗?
提前致谢。
Is unique_ptr faster than row pointer?
没有
how is this possible?
基准测试很困难。可以测量由内存布局中的偶然差异引起的差异。
我在这里试验基准测试并发现奇怪的结果。
显然创建和删除原始指针比创建 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
比原始指针快”这样的废话。
显然我在这里漏掉了一些要点,这对任何人来说都是警钟吗?
提前致谢。
Is unique_ptr faster than row pointer?
没有
how is this possible?
基准测试很困难。可以测量由内存布局中的偶然差异引起的差异。