c++ - 如何计算对象和 shared_ptr 的对齐方式?

标签 c++ shared-ptr make-shared

假设我有一个由共享指针管理的对象:shared_ptr<X> .比方说我的 X类有 98 个字节大,最后一个数据成员位于字节 97-98(一个字符)。

一般来说,共享 ptr 包含指向我的 X 的原始指针对象和指向引用计数对象的原始指针,该对象包含两个计数器(一个强引用计数器和一个弱引用计数器)。

引用计数对象从什么地址开始(即两个引用计数的位置)?会在我的 X 结束后立即开始吗?类,第 98 个字节?或者是否会有特定的数字对齐方式,比如 32 字节对齐并且它位于第 128 个字节?一般由什么决定位置?

假设make_shared已被使用。

最佳答案

这肯定是一个实现细节。

然而实际上只有两个选项,引用计数的东西可以在托管 T 对象之前或之后。

在任何情况下,我都假设引用计数器将按照它们的自然对齐方式对齐,因为具有非自然对齐的整数会在某些平台上崩溃并且在其他平台上会慢得多。

关于c++ - 如何计算对象和 shared_ptr 的对齐方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070651/

相关文章:

c++ - make_shared如何为manager object和managed object分配单个动态内存

python - 将基数设置为未确定大小的对象

c++ - 从 C++ 图像帧到 html5 <客户端浏览器中的视频标签

c++ - 测试类型是否为(智能)指针的通用方法

shared-ptr - FreeRTOS 中的共享指针和队列

c++ - 将 make_shared 与 shared_ptr<T> 一起使用仅对 T < 56 字节有益?

c++ - 共享指针不增加 use_count

c++ - 确保抽象基类是一个 shared_ptr

c++ - 为什么子类看不到我的重载函数

c++ - 不同风格的 shared_ptr 之间的差异