示例1:
using namespace std;
struct Node1{
bool m1;
int m2;
bool m3;
double m4;
bool m5;
};
// struct Node2{
// char m1;
// char m2;
// int m3;
// };
int main()
{
cout << sizeof(Node1) << endl;
/* cout << sizeof(Node2) << endl;*/
}</span>
输出结果:32
原因:double(8) > int(4) > bool(1)
所以在double出现之前采用int,原结构体每个成员变量内存分配为:1、4、1、8、1
故1扩展为4,4保持不变,第二个1必须扩展为8,这样1(4) + 4(4) + 1(8) = 16才能被8整除,最后一个1扩展为8.
总共内存4+4+8+8+8 = 32.
示例2:
<span style="font-size:18px;">#include <iostream>
using namespace std;
struct Node1{
bool m1;
bool m3;
int m2;
double m4;
bool m5;
};
// struct Node2{
// char m1;
// char m2;
// int m3;
// };
int main()
{
cout << sizeof(Node1) << endl;
/* cout << sizeof(Node2) << endl;*/
}</span>
输出结果:24
原因:参考第一条
示例3:数组
<span style="font-size:18px;">#include <iostream>
using namespace std;
//
// struct Node1{
// bool m1;
// bool m3;
// int m2;
// double m4;
// bool m5;
// };
struct Node2{
char m1;
char m2[6];
};
int main()
{
/* cout << sizeof(Node1) << endl;*/
cout << sizeof(Node2) << endl;
}</span>
结果:7
原因:char数组不可看成一个对齐整体,Node2对齐基于1;故结果为7;
示例4:结构体中的结构体
<span style="font-size:18px;">#include <iostream>
using namespace std;
struct Node1{
char m1;
double m2;
char m3;
};
struct Node2{
char m1;
Node1 m2;
};
int main()
{
/* cout << sizeof(Node1) << endl;*/
cout << sizeof(Node2) << endl;
}</span>
输出结果:32
原因:
Node1为24,这个参考示例1;
但是Node1中的对齐基数是8;因为Node2中只有char m1,基数为1小于Node1的基数8;
所以采取Node1的对齐基数8;但是Node1是一个整体,不能将其填充部分的内容分给Node2中的m1使用。故
m1必须同样分配8字节给他,总字节数;8+24=32
本文由Cout_Sev 搜集整理
转载注明出处
http://blog.csdn.net/cout_sev
谢谢!