结构体和联合体大小计算

结构体对齐规则

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

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

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

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

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

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

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

联合体内存对齐规则

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

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

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

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

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

相关推荐
4311媒体网4 分钟前
C语言操作符全解析 C语言操作符详解
java·c语言·jvm
二年级程序员19 分钟前
一篇文章掌握“顺序表”
c语言·数据结构
傻乐u兔1 小时前
C语言进阶————指针4
c语言·开发语言
历程里程碑1 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
2601_949146538 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
知南x10 小时前
【Ascend C系列课程(高级)】(1) 算子调试+调优
c语言·开发语言
2的n次方_12 小时前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
凡人叶枫13 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
凡人叶枫15 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
傻乐u兔15 小时前
C语言进阶————指针3
c语言·开发语言