我正在尝试建立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/