考虑以下C代码:
#include <stdio.h>
struct employee
{
int id;
char name[30];
};
int main()
{
struct employee e1;
printf("%d %d %d", sizeof(e1.id), sizeof(e1.name), sizeof(e1));
return(0);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
4 30 36
为什么结构的大小不等于其各个组件变量的大小总和?
Mic*_*urr 61
编译器可以为对齐要求添加填充.请注意,这不仅适用于结构字段之间的填充,还可以应用于结构的末尾(以便结构类型的数组将使每个元素正确对齐).
例如:
struct foo_t {
int x;
char c;
};
Run Code Online (Sandbox Code Playgroud)
即使c字段不需要填充,结构通常也会有sizeof(struct foo_t) == 8(在32位系统上 - 而不是32位int类型的系统),因为在c字段之后需要有3个字节的填充.
请注意,系统可能不需要填充(如x86或Cortex M3),但出于性能原因,编译器可能仍会添加填充.
| 归档时间: |
|
| 查看次数: |
159811 次 |
| 最近记录: |