
C语言结构体内存占用详解
sizeof 运算符可以获取C语言中结构体的大小。然而,结构体实际占用的字节数不仅取决于成员变量的总大小,还受到编译器内存对齐策略的影响。
让我们来看一个例子:
#include <stdio.h>
int main() {
struct date {
int year;
int month;
int day;
};
struct person {
char name[10];
char sex;
struct date birthday;
char address[10];
long zipcode;
};
size_t size = sizeof(struct person);
printf("struct person size: %zu bytes\n", size);
return 0;
}
该代码定义了person 结构体,包含多个成员变量:
立即学习“C语言免费学习笔记(深入)”;
AI 舌诊面诊问诊医疗系统 + 诊疗商城系统源码是一套结合 AI 辅助诊断与商品转化的健康类程序,基于浩创云、ThinkPHP(PHP)开发,支持微信服务号与 H5 端,适合做中医舌诊面诊问答、健康建议推送以及配套诊疗商品的运营。
-
name(字符数组,10字节) -
sex(字符型,1字节) -
birthday(嵌套的date结构体,通常为12字节,三个int成员各占4字节) -
address(字符数组,10字节) -
zipcode(长整型,通常为8字节)
简单相加,成员变量总大小为 41字节 (10 + 1 + 12 + 10 + 8 = 41)。 然而,实际大小通常大于此值,因为编译器会为了提高内存访问效率而进行内存对齐。
对齐规则通常与编译器和目标平台相关,但通常是4字节或8字节对齐。 这意味着每个成员的地址必须是其大小的倍数。 如果编译器使用4字节对齐,person 结构体的大小可能会被填充到4字节的倍数,导致最终大小大于41字节。 例如,name 可能会占用12字节(为了4字节对齐),sex 可能会占用4字节,以此类推。 最终大小可能为48字节。
总结:
结构体的大小取决于成员变量的大小和编译器的内存对齐策略。 sizeof 运算符给出的是编译器最终确定的结构体大小,这可能大于成员变量大小的简单累加。 要精确计算大小,需要了解编译器的具体对齐规则。 不同的编译器和平台可能产生不同的结果。

















