32位CPU则往四个字节凑。所以创建结构体等类型时要注意内存对齐的原则书写,以免编译器申请不必要的内存。
typedef struct udp_data
{ double d; 8 char a; 4 double b; 8} UDP_PACKET;typedef struct udp_data{ char d; 1 char a; 3 double b; 8} UDP_PACKET;typedef struct udp_data{ char d; 1 char a; 3 int b; 4} UDP_PACKET;typedef struct udp_data { double d; 8 char a; 4 int b; 4} UDP_PACKET;typedef struct udp_data 浪费内存{ char a; 4 ---》 char a; 1 int b; 4 ---》 char c; 3 char c; 4 ---》 int b; 4 double d; 8 ---》 double d; 8} UDP_PACKET;/***************************************/#include <stdio.h>#include <string.h>#define UDP_PACKET_DATA 1024typedef struct udp_data{ char a; int b; char c; double d;} UDP_PACKET;int main(){ UDP_PACKET pack; printf("udp_data size:%d\n", sizeof(pack)); printf("a:%p b:%p\n", &pack.a, &pack.b); printf("b:%p c:%p\n", &pack.b, &pack.c); printf("c:%p d:%p\n", &pack.c, &pack.d);}