【发布时间】:2017-11-07 04:46:47
【问题描述】:
我有一个指向“类型”数组的唯一指针,似乎通过以下方式访问指向该数组第一个元素的指针:
&myArrayPtr[0];
比:
myArrayPtr.get();
考虑到这些操作都定义了std::unique_ptr([]操作符和get(),而且结果是一样的,那么这些“幕后”的实现方式有什么不同吗?似乎有大约的区别10 纳秒。
std::unique_ptr<int[]> myArrayPtr;
uint64_t number_of_elements = 1000;
myArrayPtr.reset(new int[number_of_elements]);
&myArrayPtr[0];
myArrayPtr.get();
【问题讨论】:
-
为什么不检查组件并找出答案?提供有关您的微基准的完整详细信息也是一个好主意。当你直接访问它时,当然没有方法调用。
-
在上面的例子中显然不是问题,但是...
&myArrayPtr[0];= Kaboom 如果myArrayPtr为空。get(),没那么多。 -
在Godbolt 试用您的代码。开启优化(gcc 和 clang,使用 -O2)时,似乎两种方式都会生成相同的程序集。你是如何编译/测量的?
-
哎呀...我搞砸了,它们是一样的,抱歉给您带来麻烦。
标签: c++ arrays performance