结构体和联合体大小计算

结构体对齐规则

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

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

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

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

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

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

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

联合体内存对齐规则

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

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

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

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

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

相关推荐
无敌昊哥战神7 小时前
【LeetCode 257】二叉树的所有路径(回溯法/深度优先遍历)- Python/C/C++详细题解
c语言·c++·python·leetcode·深度优先
m0_488633329 小时前
C语言中枚举类型变量的定义、赋值及使用方法全解析
c语言·枚举类型·实例分析·变量定义·赋值使用
老鱼说AI9 小时前
大规模并发处理器程序设计(PMPP)讲解(CUDA架构):第四期:计算架构与调度
c语言·深度学习·算法·架构·cuda
小白橘颂14 小时前
【C语言】基础概念梳理(一)
c语言·开发语言·stm32·单片机·mcu·物联网·51单片机
co_wait14 小时前
【c 语言】linux下gcc编译工具的使用
linux·c语言·开发语言
always_TT14 小时前
结构体数组与初始化
c语言
是翔仔呐15 小时前
第13章 超声波测距传感器驱动:HC-SR04底层原理与C语言实现
c语言·开发语言·单片机·嵌入式硬件·gitee
光电笑映15 小时前
STL 源码解剖系列:map/set 的底层复用与红黑树封装
c语言·数据结构·c++·算法
for_ever_love__16 小时前
Objective- C学习: 手动内存管理
c语言·学习·ios·objective-c
小龙报16 小时前
【数据结构与算法】栈和队列的综合应用:1.用栈实现队列 2.用队列实现栈 3.设计循环队列
c语言·数据结构·数据库·c++·redis·算法·缓存