C语言:嵌套结构体的栈内存分配问题
C语言嵌套结构体的栈内存分配问题
首先定义Child结构体类型:
typedef struct Child { int a; char b[10]; } Child;
由于编译器清楚Child所有成员的空间需求,不需要用malloc动态分配,直接声明栈变量就能完成内存分配:
Child child; /* 为child及其成员在栈上分配内存 */
接下来定义包含Child的Parent结构体类型:
typedef struct Parent { int c; char d[10]; Child child; } Parent;
问题解答
是的,声明Parent类型变量时,编译器会为父结构体及其嵌套的子结构体所有成员分配足够的栈内存,parent.child.a = 5;这个赋值操作是完全有保障能正常工作的。
原因如下:
- 嵌套结构体
Parent的总大小是其所有成员(int c、char d[10]、Child child)的大小之和(编译器会自动处理内存对齐,确保总空间足以容纳所有成员)。 - 声明
Parent parent;时,栈上会开辟一块连续的内存区域,包含parent.c、parent.d,以及parent.child.a、parent.child.b的全部空间——这些成员都直接内嵌在Parent的内存块中,不需要手动额外分配内存。 - 因此直接访问
parent.child.a并赋值是合法且安全的,和直接声明Child child;后操作child.a没有本质区别。
内容的提问来源于stack exchange,提问作者9-Pin
相关产品推荐
相关产品推荐

