news 2026/4/22 7:33:31

std::shared_ptr 的引用计数是原子的——但你知道这“原子“到底多贵吗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
std::shared_ptr 的引用计数是原子的——但你知道这“原子“到底多贵吗

一个shared_ptr的拷贝,在单线程无竞争的情况下大约 5-8 纳秒(具体数字因 CPU 微架构和频率而异,下文的延迟数据均取典型 x86 服务器芯片的量级)。在 8 个线程同时拷贝同一个对象的shared_ptr时,这个数字可以膨胀到 200 纳秒以上。

40 倍。

不是因为你写了锁,不是因为你搞了什么复杂的同步原语。只是拷贝了一个"线程安全"的智能指针。

这篇文章要做一件事:把shared_ptr引用计数那个"原子操作"的真实代价,一笔一笔拆给你看。不讲泛泛的"原子操作有开销",而是从控制块的内存布局、CPU 的原子指令、缓存一致性协议、内存屏障、再到多线程竞争的放大效应,逐项量化。


先摊开底牌:控制块的内存布局

讨论原子操作的代价之前,先看清楚我们在操作什么东西。

一个shared_ptr<T>的大小是两个裸指针,16 字节(64 位平台)。第一个指向被管理的对象T,第二个指向控制块(control block)。控制块是引用计数的承载体,所有共享同一个对象的shared_ptrweak_ptr都指向同一个控制块实例。

在 libstdc++(GCC 的标准库实现)里,控制块的核心基类叫_Sp_counted_base,位于<bits/shared_ptr_base.h>。它的关键成员只有两个:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 7:28:23

复古收音机技术‘复活’记:用2SK241 JFET打造150kHz高灵敏度接收前端

复古收音机技术‘复活’记&#xff1a;用2SK241 JFET打造150kHz高灵敏度接收前端 在电子技术飞速迭代的今天&#xff0c;复古无线电设计正以独特的魅力重回硬件爱好者的视野。2SK241这款诞生于上世纪80年代的JFET晶体管&#xff0c;凭借其出色的高输入阻抗和低噪声特性&#xf…

作者头像 李华
网站建设 2026/4/22 7:22:23

3分钟掌握百度网盘提取码智能查询:baidupankey终极指南

3分钟掌握百度网盘提取码智能查询&#xff1a;baidupankey终极指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘资源提取码而烦恼吗&#xff1f;每次看到心仪的学习资料、软件工具或影音文件&#xff0c;却因…

作者头像 李华
网站建设 2026/4/22 7:21:13

瑞芯微(EASY EAI)RV1126B gstreamer使用介绍

1. GStreamer介绍 GStreamer 是用来构建流媒体应用的开源多媒体框架(framework)。其目标是要简化音/视频应用程序的开发。 1.1 基本概念 管线(pipeline)&#xff1a;又称为管道或流水线&#xff0c;是一个完整的GStreamer工作流&#xff0c;即&#xff1a;一个多媒体任务处理…

作者头像 李华
网站建设 2026/4/22 7:14:30

XUnity.AutoTranslator完全指南:5分钟实现Unity游戏实时翻译

XUnity.AutoTranslator完全指南&#xff1a;5分钟实现Unity游戏实时翻译 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经遇到过一款精彩的Unity游戏&#xff0c;但因为语言障碍而无法完全享受游…

作者头像 李华
网站建设 2026/4/22 6:53:05

如何快速对比两个SQL查询结果_使用EXCEPT或差集逻辑

MySQL不支持EXCEPT&#xff0c;需用LEFT JOINIS NULL或NOT EXISTS替代&#xff1b;EXCEPT按位置匹配列&#xff0c;要求列数相同、类型兼容&#xff0c;NULL值影响结果&#xff0c;性能依赖子查询优化。EXCEPT 在 PostgreSQL 和 SQL Server 里能直接用&#xff0c;MySQL 不行My…

作者头像 李华