之前在我的博文结构体使用方法大全中已经讲到过结构体中内存对齐的问题,不熟悉的可以去看看。
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int a;
char b;
}A;
int main(void)
{
printf("The size of A is %d bytes",sizeof(A));
return 0;
}
下面是在Dev-C++ 5.11中测试的结果(编译器是gcc):
The size of A is 8 bytes
下面是在VxWorks5.5的IDE tornado2.2中的测试情况(编译器是SIMNTgnu):
The size of A is 8 bytes
小结:可以看出,在这两个环境下,结构体中都进行了内存对齐,使原本应该只占用5个字节(int + char)的结构体占用了8个字节。
修改内存对齐为1字节
#include<stdio.h>
#include<stdlib.h>
#pragma pack(1)
typedef struct {
int a;
char b;
}A;
int main(void)
{
printf("The size of A is %d bytes",sizeof(A));
return 0;
}
下面是在Dev-C++ 5.11中测试的结果(编译器是gcc):
The size of A is 5 bytes
下面是在VxWorks5.5的IDE tornado2.2中的测试情况(编译器是SIMNTgnu):
The size of A is 5 bytes
小结:可以看出增加了内存对齐为1字节后,在两个编译环境下的结构体大小都变成了5字节。