升压的内部结构::smart_ptr
Internal structure of a boost::smart_ptr
当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()
,那么对象本身和保存信息的对象都将在一个堆块中创建,并且指针之间只有几个字节的间隔。
相关文章:
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- C++中的指针否定 (!ptr == NULL)
- 从const ptr*转换为ptr*时出现问题
- 这是MSVC 2013中具有共享PTR的单例的正确实现吗?
- 对唯一 ptr 无效读取的引用向量
- C++ 类型转换基础 PTR 到派生 PTR 保存在引用类中
- 如何使用非类型参数传递模板化类的 Ref 或 Ptr
- 有没有办法在数组上遍历shared_或任何"smart" ptr?