【问题标题】:std::unique_ptr memory and performance [duplicate]std::unique_ptr 内存和性能 [重复]
【发布时间】:2015-09-07 23:53:37
【问题描述】:

当您使用智能指针时,std::unique_ptr 通常应该 成为最接近的人。可以合理地假设,由 默认情况下,std::unique_ptrs 与原始指针大小相同,并且对于 大多数操作(包括取消引用),它们完全执行 相同的说明。这意味着即使在某些情况下您也可以使用它们 内存和周期都很紧张。如果原始指针足够小 并且对您来说足够快,几乎可以肯定 std::unique_ptr 也是。

-Scott Meyers(有效的现代 C++)

粗体部分如何为真,在 smart ptr 中找到原始 ptr 然后调用方法需要两个阶段。它们怎么能同样快?

【问题讨论】:

  • 什么是“在智能指针中查找原始指针”?实际的指针(通常)只是智能指针的一个成员,不需要“找到”任何东西。
  • 优化。这是每个人都可以享受的关于 C++ 的精彩部分!
  • 间接优化很可能是因为所有代码都对优化器可用。
  • 顺便说一句,我是 Scott Meyers。
  • @ʎǝɹɟɟɟǝſ 你不认识梅耶斯吗?性能领先的出口

标签: c++ performance c++11 unique-ptr


【解决方案1】:

可能没有“智能指针中的原始指针”。智能指针将只是原始指针。间接不会给你任何你需要的东西。

【讨论】:

  • 当你打电话给smartPtr->doF() 你会得到smartPtr->rawPtr->doF() 对吗?
  • @Narek 没有。你只需得到rawPtr->doF()。不能消除的间接作用是什么?它与int a = 3; return a; 没有什么不同。编译器将生成与 return 3; 相同的代码。
  • 你的意思是编译器很容易优化掉?
  • @Narek 是的。编译器不必放置代码来查找它可以在编译时确定的内容。编译器在编译时就知道原始指针在哪里,那么为什么要查看智能指针来获取它呢?然后一旦它不再需要智能指针,它就会删除它。
  • 实际上它是“smartPtr.rawPtr->doF()”,这意味着可以计算和使用偏移量(始终为0)。甚至没有涉及优化,因为这是正常的函数调用,您可以使用 -O0 获得它。
猜你喜欢
  • 1970-01-01
  • 2017-12-18
  • 2013-08-24
  • 2014-05-23
  • 2020-12-04
  • 2013-03-06
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多