MST

星途 面试题库

面试题:C语言结构体内存对齐示例分析

有如下C语言结构体定义: ```c struct { char a; int b; short c; } test; ``` 假设在32位系统下,编译器默认对齐方式为4字节对齐,请计算 `sizeof(test)` 的值,并说明内存对齐的过程。
37.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 计算sizeof(test)的值

    • 在32位系统下,编译器默认4字节对齐。
    • char a:占1字节。由于按4字节对齐,它后面会填充3字节,达到4字节对齐。
    • int b:占4字节,本身就是4字节对齐,无需额外填充。
    • short c:占2字节,为了满足4字节对齐,它后面会填充2字节。
    • 所以sizeof(test) = 4(char a及填充) + 4(int b) + 4(short c及填充) = 12字节。
  2. 内存对齐过程

    • 对于结构体中的第一个成员char a,它本身占1字节,但为了满足4字节对齐的要求,编译器会在a后面填充3字节,使其占用空间达到4字节。
    • 第二个成员int bint类型在32位系统下占4字节,正好是4字节对齐,不需要额外填充,直接紧跟在a及其填充字节之后。
    • 第三个成员short cshort类型占2字节,为了使整个结构体满足4字节对齐,在c后面会填充2字节,这样整个结构体占用的空间就是12字节,以满足4字节对齐的要求。

所以sizeof(test)的值为12字节。