C++内存对齐

张开发
2026/4/5 10:21:19 15 分钟阅读

分享文章

C++内存对齐
题目classaa{chara;intb;charc;};classbb{chara;charb;intc;};std::coutsizeof(aa)std::endl;std::coutsizeof(bb)std::endl;解释结构体内存对齐是指结构体成员在内存中的存放位置必须满足特定的地址对齐规则以提升访问效率并保证跨平台兼容性。它不仅影响结构体的大小还直接关系到性能和硬件可访问性。 核心规则 首成员规则第一个成员的偏移量为0。 成员对齐每个成员的起始地址必须是min(成员类型大小,编译器默认对齐数)的整数倍。 结构体整体对齐结构体总大小必须是其最大对齐数的整数倍。 嵌套结构体嵌套成员需按其自身最大对齐数对齐整体大小取所有最大对齐数的整数倍。 为什么需要对齐 硬件限制部分 CPU如 ARM不支持非对齐访问否则会触发异常。 性能优化对齐数据可一次性读取减少总线周期未对齐可能需要多次访问。 跨平台兼容不同平台对齐要求不同对齐可避免数据结构在不同平台上表现不一致。 对齐控制方法#pragmapack(n)修改默认对齐数n 通常为1,2,4,8。alignas(n)/__attribute__((aligned(n)))C11/C11标准方式控制整体对齐。__attribute__((packed))取消填充实现紧凑布局可能降低性能。解析答案classaa{chara;intb;charc;};内存分布 ■...■ ■ ■ ■ ■...3*412所以为12个字节classbb{chara;charb;intc;};内存分布 ■ ■..■ ■ ■ ■2*48所以为8个字节

更多文章