Hasty Briefsbeta

双语

Shared_ptr<T>: the (not always) atomic reference counted smart pointer

9 months ago
  • #shared_ptr
  • #C++
  • #optimization
  • GNU的libstdc++中shared_ptr<T>通过检查是否导入pthread_create来优化引用计数,仅在必要时才使用原子操作。
  • 该优化是在对比Rust的Arc::clone与C++的shared_ptr<T>的微基准测试中发现的,由于使用了非原子递增操作,C++意外地更快。
  • 这种优化在一般情况下是安全的,但在极少数情况下可能失效,例如静态编译的二进制文件加载了不包含pthread符号的共享库。
  • 其他C++实现如libcxx和VisualC++处理原子操作的方式不同,其中libcxx允许在编译时禁用线程支持。
  • Rust的Arc无法采用这种优化,因为它明确保证原子操作,这使其与不支持原子操作的Rc区分开来。