假设我有一个由共享指针管理的对象: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/