MST

星途 面试题库

面试题:C++中struct内存布局基础分析

假设有如下C++ struct定义:struct A { int a; char b; short c; }; 请分析该struct实例化对象的内存布局情况,并计算其大小,同时说明原因。
29.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 内存布局分析
    • 在C++中,结构体A包含一个int类型成员a(通常在32位和64位系统中占4字节),一个char类型成员b(占1字节),一个short类型成员c(占2字节)。
    • 由于结构体存在内存对齐规则,以提高内存访问效率。通常对齐模数是结构体中最大基本数据类型的大小,这里int是最大基本数据类型,大小为4字节,所以对齐模数为4。
    • a的起始地址是4字节对齐的,占用4字节。
    • b虽然只占1字节,但为了满足4字节对齐,它后面会填充3字节,使其偏移量是4的倍数。
    • c占2字节,从偏移量8开始存储,此时不需要额外填充。
  2. 大小计算
    • a占用4字节,b及其填充共4字节,c占用2字节,总共大小为4 + 4 + 2 = 10字节。
    • 由于整个结构体也要满足4字节对齐,所以最终结构体A的大小为12字节。

结论:结构体A实例化对象大小为12字节,原因是内存对齐规则导致成员之间及结构体整体需要满足一定的对齐要求。