gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:43 25 4
gpt4 key购买 nike

我正在尝试建立哪些数据成员基元/对象(超出 T* 指针)boost(或 std,如果它更容易的话) 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com