一般来说,结构体变量占据的内存大小是所有成员变量占据内存大小的总和,但有些例外,需要特别注意。
1、结构体变量的首地址能够被其最宽的基本类型成员的大小所整除。
2、结构体每个成员相对于结构体首地址的偏移量,都是成员大小的整数倍。。
3、结构体的总大小为结构体最宽基本类型成员的大小的整数倍。
字节对齐有助于加快计算机的取数速度,节省指令周期,因此不符合以上要求,编译器都会对结构体填充字节。
#include <iostream> using namespace std; int main() { struct computer { char c1; // c1存放在【0】...【1】的位置上。 short s2; // 偏移必须是4的整数,所以在c1后面【2】...【3】处填入空格,s2存放在【4】...【7】 int i3; // i3存放在【8】,但整个结构体大小为最宽的成员的整数倍, // 最宽的int是4,12为4整数倍,所以i3后面【9】...【11】处填充空格 }; return 0; }
原文:https://www.cnblogs.com/Open-Source/p/12920547.html