嵌入式技术
计算以下两个结构体所占空间大小分别是多少?
struct t1 {
char a;
short int b;
int c;
char d;
};
struct t2 {
char a;
char b;
short int c;
int d;
};
64 位环境下,sizeof(struct t1) = 12, sizeof(struct t2) = 8
。
为了保证程序的访存效率,各类型变量在内存中的存储位置有所要求。比如,为保证能够一次性获取 int
类型变量的值,int
类型的变量会被存储在 4 的整数倍的地址处。为保证访存效率,结构体中的成员也要满足此类要求,这就是结构体的内存对齐,其有两个整数倍规则:
对于文章开头问题中的结构体,其真实内容如下, 编译器会向结构体中插入预留位 :
/*
struct t1 {
char a;
short int b;
int c;
char d;
};
*/
struct t1 {
char a;
char reserved1[1];
short int b;
int c;
char d;
char reserved2[3];
};
/*
struct t2 {
char a;
char b;
short int c;
int d;
};
*/
struct t2 {
char a;
char b;
short int c;
int d;
};
所以,sizeof(struct t1) = 1 + 1 + 2 + 4 + 1 + 3
,sizeof(struct t2) = 1 + 1 + 2 + 4
。
struct t3 {
char a;
char b;
double c;
short int d;
int e;
};
=
struct t3 {
char a;
char b;
char reserved1[6];
double c;
short int d;
char reserved2[2];
int e;
};
全部0条评论
快来发表一下你的评论吧 !