结构体和联合体大小计算

结构体对齐规则

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

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

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

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

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

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

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

联合体内存对齐规则

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

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

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

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

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

相关推荐
算法鑫探17 小时前
闰年判断:C语言实战解析
c语言·数据结构·算法·新人首发
浅时光_c18 小时前
14 结构体 共用体 枚举类型
c语言
代码中介商1 天前
C语言函数完全指南:从基础到实践
c语言·开发语言
hssfscv1 天前
软件设计师下午试题四——C语言(N皇后问题、分治、动态规划)
c语言·算法·动态规划
爱编码的小八嘎1 天前
C语言完美演绎8-7
c语言
幽灵诶1 天前
理解指针2
c语言
boonya1 天前
一文读懂MCP:AI连接万物的“USB-C接口”
c语言·开发语言·人工智能
yashuk1 天前
C语言条件编译三种方式及第一种方式的格式、作用与示例
c语言·程序设计·条件编译·代码示例·预处理程序
qeen871 天前
【数据结构】栈及其C语言模拟实现
c语言·数据结构·学习·
我不是懒洋洋1 天前
深入理解C语言指针:从一级指针到函数指针
c语言