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

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

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

假设已使用make_shared

最佳答案

这肯定是实现细节。

但是实际上只有两个选项,引用计数内容可以在托管T对象之前或之后。

在任何情况下,我都将假定引用计数器将按其自然对齐方式对齐,因为具有不自然对齐的整数会在某些平台上崩溃,而在其他平台上则会慢得多。

09-04 16:12
查看更多