内存对齐
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 1024
typedef 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);
}