我正在尝试建立哪些数据成员基元/对象(T*
指针之外)boost
(或std
如果它更容易)shared_ptr
具有哪些数据成员基元/对象当T*
用于访问底层堆内存时,它与shared_ptr
指针在同一个L1缓存行中?
当我这样做时:
sizeof(boost::shared_ptr<int>)
和
sizeof(boost::shared_ptr<double>)
我得到相同的答案--8个字节,但在我的系统上,一个int是4个字节而一个double是8个字节?
我查看了shared_ptr
的提升源代码:
http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/shared_ptr.htm
但我甚至无法看到T*
数据成员....所以我不太确定boost::shared_ptr
在数据成员方面的外观如何?
答案 0 :(得分:3)
boost::shared_ptr<>
包含两个指针,一个指向对象本身,另一个指向用于引用计数,正确销毁等的跟踪器对象。这意味着它将2 * sizeof(void*)
大。
跟踪器对象的结构当然是一个实现细节,但它是几十个大字节(虚拟表,指向对象的指针,引用计数,弱计数和一些额外的标志等等)。
如果你按照建议使用boost::make_shared()
,那么对象本身和信息helding将在一个堆块中创建,指针将只相隔几个字节。