假设我有一个由共享指针管理的对象:shared_ptr<X>
。可以说我的X
类大98字节,最后一个数据成员位于字节97-98(一个字符)。
一般而言,共享ptr包含指向我的X
对象的原始指针和指向引用计数对象的原始指针,其中包含两个计数器(一个强引用计数器和一个弱引用计数器)。
引用计数对象将从哪个地址开始(即两个引用计数的位置)?是在我的X
类的第98个字节结束之后吗?还是会有特定的数字对齐方式,比如说32字节对齐并且在第128个字节对齐?一般由什么决定位置?
假设已使用make_shared
。
最佳答案
这肯定是实现细节。
但是实际上只有两个选项,引用计数内容可以在托管T
对象之前或之后。
在任何情况下,我都将假定引用计数器将按其自然对齐方式对齐,因为具有不自然对齐的整数会在某些平台上崩溃,而在其他平台上则会慢得多。