大多数系统(如 32/64 位)会按最宽成员的对齐要求来对齐结构体。所以总大小是最宽成员数据类型的整数倍;
如最宽的成员是 double d
(8 字节),所以结构体通常按 8 字节对齐,所以总大小为8*x;
成员的对齐规则:
-
每个成员的偏移地址必须能被其自身大小整除。
-
结构体的总大小必须是最宽成员大小的整数倍。
c 语言结构体空间 计算是以最大元素为单元开辟空间,从第一个元素 按4字节对齐开始往里放,如果能放下就放,放不下就开辟新空间;
如
大多数系统(如 32/64 位)会按最宽成员的对齐要求来对齐结构体。
这里最宽的成员是 double d
(8 字节),所以结构体通常按 8 字节对齐。
成员的对齐规则:
-
每个成员的偏移地址必须能被其自身大小整除。
-
结构体的总大小必须是最宽成员大小的整数倍。
参考2:https://www.cnblogs.com/adamjwh/p/5828059.html
参考3:C语言结构体,共用体所占字节数计算_又又爱拍照的博客-优快云博客_共用体变量所占内存长度是
STM32 终极字节对齐解析_嗒曦的博客-优快云博客_stm32 字节对齐