c++ 如何比较智能指针的性能问题,在服务器核心代码库(如谷歌的)与大规模的时间关键的嵌入式系统(如美国宇航局)?

z18hc3ub  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(87)

在cpp con 2019的演讲中,钱德勒Carruth认为c++ std::unique_ptr不是一个真正的零成本(运行时)抽象:https://www.youtube.com/watch?v=rHIkrotSwcc&t=6s
我在一个嵌入式系统上工作,团队拒绝使用智能指针,甚至std::unique_ptr。高级工程师反对智能指针的论点是关于假定的固有运行时开销。
尽管在cpp con 2019上声称std::unique_ptr不是零成本,钱德勒Carruth仍然坚持使用std::unique_ptr比使用原始指针更好。当钱德勒在服务器核心上工作时,是否有一些特定于嵌入式系统的限制条件使Chandler的论点不适用于嵌入式开发?特别是在真实的环境(RTOS)中,原始指针是必要的吗?
我想不出或找到一个关于嵌入式系统的资格,可以符合钱德勒在cpp 2019上声称的任何内容。过去几天我查阅的所有资源都建议在嵌入式开发中使用智能指针。

cgvd09ve

cgvd09ve1#

“业绩”需要资质。在实时系统中,关键的方面是“确定性”。如果std::unique_ptr操作具有确定性(恒定时间)行为,则安全性胜过原始速度。线程安全性和原子性可能是一个考虑因素。实现这一点的方法可能会导致非确定性行为。
然而,使用std::unique_ptr建议使用动态内存,以及每当指针在作用域退出时调用析构函数,这本身是不确定的,在许多实时和/或安全关键系统中不建议使用。
我建议,如果你的项目接受来自堆的动态对象示例化(而不是placement-new,或其他确定性解决方案),那么std::unique_ptr的使用将缓解由此产生的内存泄漏问题,但不是确定性或线程安全问题。
当然,您可以定义一个自定义的删除器,如果使用placement-new,则可以确保对象析构函数在指针超出作用域时被自动调用。

相关问题