【发布时间】:2014-09-25 12:50:33
【问题描述】:
#include<iostream>
using namespace std;
class Test
{
int a;
double d;
char c;
};
int main()
{
cout<<sizeof(int)<<endl;
cout<<sizeof(double)<<endl;
cout<<sizeof(char)<<endl;
cout<<sizeof(Test)<<endl;
Test sobj;
Test *dobj = new Test();
cout<<dobj<<endl;
dobj++;
cout<<dobj<<endl;
cout<<sizeof(sobj)<<endl;
cout<<sizeof(dobj)<<endl;
return 0;
}
输出:
4
8
1
24
00380A08
00380A20
24
4
这里我的问题是当我们使用 sizeof 运算符打印类的大小时,它显示为 24 字节,因为没有应用填充它很清楚,但是当我看到地址之间的差异时,它显示类大小为 12 字节,如何正在分配内存..??
【问题讨论】:
-
你在哪里看到 12 个字节?
-
0x00380A20 - 0x00380A08 = 0x18 = 24(基数为 10)。您示例中的地址以 16 进制(十六进制)打印。
-
为什么你认为没有应用填充?
-
肯定应用了填充:coliru.stacked-crooked.com/a/eb6a1b3721b875f0 您的示例对应于 Layout1,其中 int 后有填充(以在 8 字节边界上对齐双精度)和 char 后有填充(使整个结构在 8 字节边界上对齐),为结构提供总共 24 个字节。其他两种布局可以将 int 和 char 字段打包到同一个 8 字节区域中,因此结构的大小为 16。
标签: c++ object memory size sizeof