C语言字节对齐64位和32位

(第一次写博客:有不对的地方还望指出)

 

借前辈们的话再详细补充linux64位下字节对齐:
 
  在GNU GCC 编译器中,遵循的准则:根据最宽的基本数据类型来定——对齐模数最大只能是4,也就是说,即使结构体中有double类型,对齐模数还是4,所以对齐模数只能是1,2,4。
 
  linux64位系统下默认最大对齐位8,也就是如用#pragma pack(16)设置字节对齐超过最大对齐,其无效,还是按照最大对齐,所以对齐模数只能是1,2,4,8;如果最大类型为int,那么按照4字节对齐,如果最大字节为short按照2字节对齐,最大字节为char按照1字节对齐;
 
  但是64位下如果有指针则按8字节对齐,因为在64位下指针占8字节,除此之外32下int占多少字节,其64位下就占多少个字节。
 
  很奇怪只有这个特殊------但是64位下如果有longdouble则按16字节对齐,这个原因不知道是为啥,实践实际就是这样。

你可能感兴趣的:(C语言)