升压的内部结构::smart_ptr

Internal structure of a boost::smart_ptr

本文关键字:smart ptr 结构 内部      更新时间:2023-10-16

shared_ptr用于访问底层堆内存时,我正试图确定boost(或std,如果更容易的话)shared_ptr具有哪些数据成员基元/对象(在T*指针之外),这些基元和对象将与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(),那么对象本身和保存信息的对象都将在一个堆块中创建,并且指针之间只有几个字节的间隔。