c++ - boost::smart_ptr 的内部结构

标签 c++ boost shared-ptr

我正在尝试建立boost(或std,如果更容易的话)的数据成员基元/对象(超出T*指针) ) shared_ptr 具有,当使用 shared_ptr 访问底层堆时,它将与 T* 指针位于同一 L1 缓存行中内存?

当我这样做时:

sizeof(boost::shared_ptr<int>)

sizeof(boost::shared_ptr<double>)

我得到相同的答案 - 8 个字节,但在我的系统上,int 是 4 个字节,double 是 8 个字节?

我查看了shared_ptr的boost源代码:

http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/shared_ptr.htm

但我什至看不到 T* 数据成员......所以我不太确定 boost::shared_ptr 在数据方面看起来如何成员?

最佳答案

boost::shared_ptr<>包含两个指针,一个指向对象本身,一个指向用于引用计数、正确销毁等的跟踪器对象。这意味着它将是 2 * sizeof(void*)大。

跟踪器对象的结构当然是一个实现细节,但它有几十个字节大(虚拟表、指向对象的指针、引用计数、弱计数和一些额外的标志等等)。

如果您使用boost::make_shared()按照建议,对象本身和保存该对象的信息都将在一个堆 block 中创建,并且指针仅相距几个字节。

关于c++ - boost::smart_ptr 的内部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23121935/

相关文章:

c++ - shared_ptr 如何存储删除器?

c++ - shared_from_this 导致 bad_weak_ptr

c# - 用于 C# 的 C++ COM DLL

c++ - 如何以兼容API的方式重命名类成员?

c++ - 为什么要输入两次非字符值才能结束程序

c++ - 对类成员使用智能指针

c++ - 错误 LNK2019 : unresolved external symbol

c++ - 删除和修改 Boost MultiIndex 容器中的元素

c++ - boost::trim_right_if 和空字符

c++ - 使用 boost 和 python 绑定(bind)在 osx 上构建 32 位版本的 libtorrent