struct内存对齐

来源:互联网 发布:免费源码发布站程序 编辑:程序博客网 时间:2024/06/09 22:03
struct内存对齐的规则是:

1、对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据的偏移量必须是:
Min(编译器被指定的对齐字节数,该数据成员的自身长度)的倍数
GCC中,Min(系统默认4, 数据成员自身长度)的倍数。

2、在数据成员完各自对齐之后,结构体(或联合体)本身也要进行对齐:
Min(编译器被指定的对齐字节数,struct成员中最长数据类型长度)
GCC中,Min(系统默认4, struct成员中最大的数据类型长度)。


#include "stdio.h"#include "stdlib.h"struct abcd{//6    char a;//1    char b;//1    short c;//2    char d;//1};struct node1{//8    char a1;//1    short b1;//2    int c1;//4};struct node2{//12;    char a2;//1    int c2;//4    short b2;//2};struct id_all_char{//10    char id3[3];//3    char ver;//1    char revision;//1    char flag;//1    char size[4];//4};struct idid{//12    char id3[3];//3    char ver;//1    char revision;//1    char flag;//1    int size;//4};struct all_short{//6    short a;//2    short b;//2    short c;//2};int main(){    printf("sizeof(abcd)=%d\n",sizeof(struct abcd));printf("sizeof(struct node1)=%d\n",sizeof(struct node1));printf("sizeof(struct node2)=%d\n",sizeof(struct node2));printf("sizeof(struct id_all_char)=%d\n",sizeof(struct id_all_char));printf("sizeof(struct idid)=%d\n",sizeof(struct idid));    printf("sizeof(struct all_short)=%d\n",sizeof(struct all_short));    return 0;}