C语言的结构体内存对齐又三条原则 如下:
①数据成员对齐规则:
结构体的数据成员中,第一个成员从offset为0的地址开始,以后每一个成员存储的起始位置为该成员大小的整数倍
②结构体作为成员:
如果一个结构体1作为另一个结构体2的数据成员,则在结构体2中结构体1要从1内部成员最大的整数倍地址开始存储。
③结构体的总大小(sizeof):
为该结构体内部最大基本类型的整数倍,不足的要补齐,而不是简单的所有成员的大小总和。
如果结构体不满足对齐规则,编译器会又自动补齐机制(除非强制对齐.)
这个问题会导致在你以后操作中的一些不可预料错误.
最近学习python时自己制作了一个小工具检查结构体成员是否对齐.代码如下:
import traceback
listScannedFile = []
dirtScannedMacro = {}
listDefinedMacro = []
class ReadFileEndError(Exception):
"""Read File End"""
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
def ScanStructInit