当前位置: 首页 > news >正文

自定义类型-结构体(二)

结构体内存对齐

偏移量

指的是结构体中某个成员相对于结构体起始地址的字节距离

第一个成员的起始位置为0,一个字节表示一个单位

这里的数字表示的是该成员地址与结构体首地址之间的值

对齐规则

1.结构体第一个成员的第一个字节的偏移量为0

2.其余成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处

对齐数:编译器有一个默认的对齐数,这个数与成员变量的的大小进行对比,小的一方为该成员变量的对齐数

其余成员的变量要存储在对齐数的整数倍

例:第一个为char类型大小为1,第二个为int 大小为4个字节,第二个成员的对齐数是4(4比8小),因此存放的位置是4的倍数,因为第一个成员的大小为1,没有超过4,所以存放的位置为偏移量4

3.结构体的总体的大小,必须是最大对齐数的整数倍

以上述的例子为例

在设置第三个成员变量,char,大小为1字节,根据第二个规则,偏移量为8,因为最大的对齐数是4,而三个成员变量所使用的字节长度为9(以0开始计算),所以4的倍数8,就不能使用,只能使用12,因此该结构体的总体大小为12字节

4.当嵌套了结构体时结构体的总体大小是所以结构体的最大对齐数的倍数

修改默认对齐数

使用预处理指令“ #pragma ”可以修改编译器的默认对齐数

语法结构:#pragma pack

#pragma pack(n)         // 设置新的对齐数为 n(通常为 1, 2, 4, 8, 16 等)
#pragma pack()          // 恢复默认对齐数

相关文章:

  • 本地大模型工具深度评测:LM Studio vs Ollama,开发者选型指南
  • Java多线程(超详细版!!)
  • C++STL——priority_queue
  • 【Redis】基础命令数据结构
  • 【C++】string类
  • Linux进程间通信(四)之补充【日志】
  • 算法训练营第十三天|226.翻转二叉树、101. 对称二叉树、 104.二叉树的最大深度、111.二叉树的最小深度
  • 使用 librosa 测量《忘尘谷》节拍速度
  • 人形机器人量产元年开启,AI与物理世界深度融合
  • 局域网常用的测速工具,Iperf3使用教程
  • 数仓-如何保障指标的一致性
  • U盘制作系统盘(含U盘恢复)
  • dockerfile编写入门
  • 正式部署abp vnext应用程序时,如何生成openiddict.pfx证书文件
  • Proser:在使用中改进
  • 21、DeepSeekMath论文笔记(GRPO)
  • 如何更改typora图片存储位置
  • 从前端视角看网络协议的演进
  • 【入门】数字走向II
  • (二)Linux下基本指令 2
  • 上海市委常委会会议暨市生态文明建设领导小组会议研究基层减负、生态环保等事项
  • 外交部:习近平主席同普京总统达成许多新的重要共识
  • 明星同款撕拉片,为何能炒到三四百一张?
  • 牛市早报|国家发改委:今年将推出约3万亿元优质项目,支持民营企业参与
  • 融创中国:今年前4个月销售额约112亿元
  • 新消费观察| 零售品牌 “走出去” ,如何开辟“新蓝海”?