MST
星途 面试题库

面试题:C语言结构体对齐基础问题

请解释C语言中结构体成员的对齐规则,并且分析以下结构体占用的内存大小:struct { char a; int b; short c; } testStruct;
33.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. C语言中结构体成员的对齐规则
    • 结构体成员的对齐是为了提高内存访问效率。
    • 每个成员按其自身的对齐字节数(一般为其类型大小,例如char为1字节,short为2字节,int通常为4字节,double通常为8字节等)进行对齐。
    • 结构体的整体大小为其最大对齐字节数成员大小的整数倍。
    • 结构体的起始地址也必须是其最大对齐字节数成员大小的整数倍。
  2. 分析struct { char a; int b; short c; } testStruct;占用的内存大小
    • char achar类型占1字节。
    • int bint类型一般占4字节,由于char只占1字节,为了满足int的对齐要求(4字节对齐),在a后需要填充3字节,此时从a开始到b共占4字节。
    • short cshort类型占2字节,由于前面b已经是4字节对齐,c从第8字节开始存储,c占2字节。
    • 整个结构体的最大对齐字节数是int的4字节,此时结构体总大小为1 + 3(填充)+ 4(b)+ 2(c)= 10字节,10不是4的整数倍,需要再填充2字节,使其大小为12字节,满足最大对齐字节数的整数倍。

所以,struct { char a; int b; short c; } testStruct;占用12字节内存。