文章出处:https://www.cnblogs.com/dabiao/archive/2010/04/15/1712458.html
C编译器的缺省字节对齐方式(自然对界)
在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配空间。
在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同。
C编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该成员数据类型的长度。如int型成员的自然对界条件为4字节对齐,而double类型的结构成员的自然对界条件为8字节对齐。若该成员的起始偏移不位于该成员的“默认自然对界条件”上,则在前一个节面后面添加适当个数的空字节。
C编译器缺省的结构整体的自然对界条件为:该结构所有成员中要求的最大自然对界条件。若结构体各成员长度之和不为“结构整体自然对界条件的整数倍,则在最后一个成员后填充空字节。
例子1(分析结构各成员的默认字节对界条界条件和结构整体的默认字节对界条件):
struct Test
{
char x1; // 成员x1为char型(其起始地址必须1字节对界),其偏移地址为0
💡 觉得这篇文章有帮助吗?
