【发布时间】:2014-04-16 23:21:45
【问题描述】:
我正在尝试确定boost(或std,如果更简单的话)shared_ptr 具有哪些数据成员原语/对象(在T* 指针之外),它们将在同一L1 缓存行中T*指针,当shared_ptr用于访问底层堆内存?
当我这样做时:
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.org/doc/libs/1_55_0/boost/smart_ptr/shared_ptr.hpp,两个成员分别是
element_type * px;和boost::detail::shared_count pn; -
在 64 位系统上,指针大小应该始终 (?) 为 8 字节,无论它指向什么(除非它指向一个数组,然后
sizeof返回类型时间的大小数组的长度。double是 IEEE 754 定义的 8 个字节。int通常是 4 个字节长,要获得 64 位整数类型,您可以使用long long或来自<cstdint>的std::int64_t。 -
一般来说,参考已经在你机器上的 boost 源而不是 www.boost.org 上的网页可能更有效(标题肯定会在那里,源任何 lib 文件都可能没有,但这些文件只占提升的一小部分)。
标签: c++ boost shared-ptr