结构体和联合体大小计算

结构体对齐规则

1.第一个成员在结构体变量偏移量为0的地址处。

2.除第一个成员外,所有成员变量对齐到该结构体成员对齐数的整数倍的地址处。

3.该结构体大小为结构体对齐数的整数倍。

4.如果该结构体里面还含有一个成员结构体A,则A对齐到A这个结构体的结构体对齐数的整数倍处。

注意:请把结构体成员对齐数和结构体对齐数区分清楚。

结构体成员对齐数=min(结构体成员大小,编译器默认对齐数),VS中默认对齐数为8;

结构体对齐数=max(所有结构体成员对齐数);

联合体内存对齐规则

1.联合体大小最小为最大成员的大小;

2.联合体的大小为成员中的最大对齐数的整数倍。

为什么需要进行内存对齐?

1.性能原因:数据结构(尤其是栈)应该尽可能在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问,而对齐的内存访问仅需要一次访问。

2.平台原因:不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。

相关推荐
wuminyu6 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
Logic1016 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法
老王爱玩车8 小时前
文件操作从打开到缓冲区
c语言·开发语言·学习
Zwawa9 小时前
传感器模块都在交出什么:从模拟电压到数字协议
c语言·单片机·嵌入式
程序员zgh10 小时前
C++ erase() 函数用法
c语言·开发语言·c++·学习
迪丽热爱11 小时前
一、C语言概述与程序结构
c语言·开发语言·算法
殷色玫瑰14 小时前
AVL树:从平衡因子到四种旋转的完整实现
c语言·数据结构·c++·算法·visualstudio
沐欣工作室_lvyiyi15 小时前
水文信息检测系统的设计与实现(论文+源码)
c语言·单片机设计·柳州工学院·河南工学院·怀化学院·集美大学·辽宁科技学院
007张三丰15 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·c语言·c++·内存管理
殷色玫瑰17 小时前
C++ STL:map 与 set 详解——从底层红黑树到实际应用
c语言·数据结构·c++·算法·visualstudio·rpc