c语言智能指针和指针的区别,与C ++中的普通指针相比,智能指针的开销是多少?...

我的答案与其他答案不同,我真的很想知道他们是否曾经分析过代码。

shared_ptr的创建开销很大,因为它为控制块分配了内存(保留了ref计数器和指向所有弱引用的指针列表)。因此,它还有巨大的内存开销,而且std :: shared_ptr始终是2指针元组(一个指向对象,一个指向控制块)。

如果将shared_pointer作为值参数传递给函数,则它将比普通调用至少慢10倍,并在代码段中创建大量代码以展开堆栈。如果通过引用传递它,则会获得其他间接访问,这在性能方面也可能会更差。

因此,除非该功能确实涉及所有权管理,否则您不应该这样做。否则,请使用“ shared_ptr.get()”。它不能确保在正常的函数调用期间不会杀死您的对象。

如果您发疯并在诸如编译器中的抽象语法树之类的小对象上或在任何其他图形结构中的小节点上使用shared_ptr,您将看到性能下降和内存增加。我看到了一个解析器系统,该系统在C ++ 14投放市场之后以及程序员学会正确使用智能指针之前不久就被重写了。重写比旧代码慢了一个数量级。

这不是灵丹妙药,根据定义,原始指针也不错。糟糕的程序员是坏人,不良的设计是坏人。谨慎设计,设计时要明确所有权,并尝试主要在子系统API边界上使用shared_ptr。

如果您想了解更多信息,可以观看Nicolai M. Josuttis关于“ C ++中共享指针的实际价格”的精彩演讲,网址为https://vimeo.com/131189627

。锁等。一旦您聆听,您将永远不会谈论此功能便宜。如果只想证明幅度更慢,请跳过前48分钟,看看他运行的示例代码在任何地方使用共享指针时,运行速度都要慢180倍(与-O3编译)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值