c语言结构体嵌套的对齐方式

2023-05-16

1:在代码中有结构体嵌套的方式,又需要获取每个变量的地址。那么需要了解结构体嵌套和单一结构体的一些对齐方面的规则。

2:对于嵌入式的设备来说,对齐很重要,有些cpu不支持不对齐的访问方式,有的cpu支持,只是效率上会降低。

3:arm中默认编译的时候会进行对齐。

规则一:结构体中的第一个成员位置在偏移量0,之后每个变量的偏移量必须是它本身字节数的整数倍。

规则二:如果结构体中嵌套结构体,那么嵌套的结构体的偏移量必须是它最大成员的字节数的整数倍。

规则三:结构体的总偏移量必须是它最大成员字节数的整数倍(包括嵌套的结构体中的最大成员)。

如果一个结构体B里嵌套另一个结构体A,还是以最大成员类型的字节对齐,但是结构体A存储起点为A内部最大成员整数倍的地方。(struct B里存有struct A,A里有char,int,double等成员,那A应该从8的整数倍开始存储。),结构体A中的成员的对齐规则仍满足自身的规则
注意:
1)结构体A整体所占的大小为该结构体成员内部最大元素的整数倍,不足补齐。
2)不是直接将结构体A的成员直接移动到结构体B中。

一些特殊情况

其实对于4字节对齐,如果含有嵌套结构体,那么嵌套结构体本身也是4字节对齐,那么最后一个是32bit数据就没有问题。因为之前的都会补上。

如果嵌套的结构体只有一个数据,那么不管是16bit还是32bit,都不会有问题。因为类似于直接插入到结构体中,不存在本身的对齐问题

如果嵌套结构体最后是16bit,四字节对齐,那么如果没有对齐,后面要补一个16bit,如果后面接着的变量是32bit的,那么数据库中的也是对的,因为本来16bit接一个32bit也需要补,正好嵌套结构体本身补了一个。

如果嵌套结构体都是16bit,结构体后面跟的也是16bit,那么其实前面的结构体都是2 byte对齐,不需要补,所以连接下面的时候相当于直接连接,如果后面跟的是32bit的数据。那么可能会因为地址不是4的倍数而补齐。
————————————————
版权声明:本文为CSDN博主「binbinyantai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangbinyantai/article/details/79956122

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言结构体嵌套的对齐方式 的相关文章

  • C语言实现快速排序算法

    快排作为公认最优秀的排序方法 xff0c 是每一个程序员都应该掌握的 xff0c 那么 xff0c 今天就由我来为大家简单讲解一下快速排序算法的代码 源代码如下 xff1a include lt stdio h gt void quicks
  • C语言实现二分查找

    相较于线性查找 xff0c 二分查找在面对大量数据时的效率更高 xff0c 但它的缺点是只能对有序数组进行查找 源代码如下 xff1a include lt stdio h gt void binarysearch int a int su
  • 约瑟夫环详解

    package newjosephu public class myfinaljosephu 你可能会说crazy 我只想说ez xff01 public static void main String args circlelinkedl
  • ECS弹性云服务器常用端口、安全组

    弹性云服务器常用端口 弹性云服务器常用端口如 表1 所示 您可以通过配置安全组规则放通弹性云服务器对应的端口 xff0c 详情请参见 添加安全组规则 表1 弹性云服务器常用端口 协议 端口 说明 FTP 21 FTP服务上传和下载文件 SS
  • 01背包问题(滚动数组实现的逻辑)

    package tttest public class mybetterbag public static void main String args int weight 61 1 3 4 int bagsize 61 4 int val
  • java递归实现辗转相除法

    public static int getres int a int b if b 61 0 return getres b a b return a
  • java 线索二叉树的构建

    public class test public static void main String args Node root 61 new Node 1 Node node2 61 new Node 2 Node node3 61 new
  • ubuntu下查看文件(夹)大小的命令

    记录下自己常用的查看文件夹和文件大小的命令 查看当前所处的文件夹的整个大小 xff08 不包括具体内容 xff0c 只看当前文件夹大小 xff09 span class token function du span sh 查看当前文件夹中各
  • git stash时出现xxx:needs merge问题

    项目需要git merge其他分支 xff0c 但由于本地也修改过 xff0c 所以希望先git stash后再merge xff0c 这时出现以下问题 xff1a xxx xxx xxx cpp xff1a needs merge 通过g
  • FFMPEG 之视频播放

    先看界面效果 xff0c 虽然有点low xff0c 但是效果实现了 一 实现原理 1 使用ffmpeg解码视频 2 然后使用libyuv播放解码的视频 二 实现 1 先看目录结构 2 ffmpeg编译以及引用 xff0c 在之前的篇章已经
  • 一步一步学CMake 之 VSCode+CMakeLists 调试 C++ 工程

    目录 1 插件推荐 2 文件准备 3 开始调试 一步一步学 CMake 系列文章 1 插件推荐 CMake CMake tools 2 文件准备 新建文件夹 xff1a TEST 新建文件 xff1a CMakeLists txt 内容如下
  • 51单片机使用8位重装定时器实现PWM输出同时实现DAC转换

    51单片机使用八位重装定时器实现PWM输出同时实现DAC转换 最近想要做一个数控电源 xff0c 打算使用51单片机实现电压和电流的闭环 xff0c 但是手头上的51单片机为STC89C51系列的单片机 xff0c 没有ADC采样功能 xf
  • 【MYSQL】分组之后获取每组最新的数据

    记录一次有点麻烦的sql 可以直接复制拿去测试 xff0c 一开始我也百度来着 xff0c 发现要么没法满足我的需求 xff0c 要么就连看下去的欲望都没有 建表测试demo xff1a span class token keyword C
  • C++ 指针中:指针数组 指向指针数组的指针 指向指针的指针

    指针数组 xff1a 存储指针的数组 pa n an array of pointers 注意这里 优先级高于 xff0c 因此pa是一个包含三个指针的数组 指向指针数组的指针 pd n pointers to an array of po
  • Flutter要被放弃了?别瞎传了!

    前言 Flutter 作为Google出品的一个新兴的跨平台移动客户端UI开发框架 xff0c 正在被越来越多的开发者和组织使用 xff0c 包括阿里的咸鱼 腾讯的微信等 今天 xff0c 我主要讲解Flutter中文本组件方面的Widge
  • (学习笔记)手把手教你学51单片机:定时器与数码管

    一 逻辑电路与逻辑运算 逻辑运算符 xff1a xff08 1 xff09 按变量整体值进行运算 xff1a 逻辑与 amp amp 逻辑或 xff08 xff09 逻辑非 xff08 xff01 xff09 xff08 2 xff09 按
  • (学习笔记)手把手教你学51单片机:中断与数码管动态显示

    一 c语言的数组 1 1数组的基本概念 数组是具有相同数据类型的有序数据的组合 xff0c 一般来讲数组定义后满足以下三个条件 xff1a xff08 1 xff09 具有相同的数据类型 xff08 2 xff09 具有相同的名字 xff0
  • KST-51:从999999开始的倒计时程序,只显示有效位

    此程序为手把手教你学51单片机的例程 例程中实现只显示有效位 xff08 高位0不显示 xff09 xff0c 实现了数码管稳定显示不抖动 for结合break 实现只显示有效位 switch结合i 实现数码管动态刷新 include lt
  • KST51单片机:通过中断实现矩阵按键的次数检测与消抖

    以Key4为例 xff0c 使用定时中断2ms进行消抖 xff0c 对连续8次 xff08 16ms xff09 的按键状态进行判断 如果全部为1则弹起 xff0c 将按键当前状态 xff08 Keysta xff09 为1 xff1b 全

随机推荐

  • 关于单片机蓝桥杯

    经大佬提醒 xff0c 已修改 芯片 xff1a IAP15F2K61S2 考核内容 xff1a LED 数码管 独立按键 矩阵按键 定时器 555 超声波 xff08 有基础 xff09 iic EEPROM ADC ds18b20 xf
  • NX nomachine 远程桌面配置

    其实它是Linux下一款类VNC的远控软件 xff0c 但据说安全性方面比VNC更好 xff0c 通过SSH协议加密进行传输的 而且传输是采用数据压缩技术 xff0c 传输更快 1 安装rpm包 安装顺序 xff1a root 64 loc
  • git 命令

    1 打patch xff08 git format patch xff09 git format patch HEAD 生成最近的1次commit的patch git format patch HEAD 生成最近的2次commit的patc
  • gitlab使用

    参考https blog csdn net justlpf article details 80681853 一 基本操作 1 登录 xff1a 2 修改密码 xff1a 二 项目管理 1 新建项目 2 编辑或删除项目 三 用户管理 xff
  • wsl不能启动解决方法

    wsl不能启动解决方法 admin 权限打开termianl 执行下面的命令 xff1a Dism Online Cleanup Image CheckHealth 是检查映像以查看是否有检测到损坏 Dism Online Cleanup
  • 偷偷爆料下2022年各公司年终奖情况,也就亿点点羡慕.....

    偷偷爆料下2022年各公司年终奖情况 xff0c 也就亿点点羡慕 不少公司已经陆陆续续有年终奖的消息传了出来 xff0c 这里给大家汇总了截止到1月 30 日 xff0c 互联网爆料的包括字节 腾讯 百度等公司在内年终奖情况 在默默羡慕的同
  • Ubuntu下使用QtCreator编译出现collect2: ld terminated with signal 9 [Killed] 解决方法

    定位问题是 xff0c 由于交换分区不足 xff0c 导致编译出错 解决思路就是增加交换分区空间 xff0c 然后重新启动交换分区 方法如下 默认使用的是root用户 xff1a 1 创建用于交换分区的文件 xff1a dd if 61 d
  • python使用清华源镜像安装包

    pip install i https pypi tuna tsinghua edu cn simple packages
  • 使用xrdp实现Windows 远程桌面linux

    一般情况下我们用ssh客户端远程登陆Linux系统 xff0c 至于图形界面下的Linux远程登陆工具 xff0c 我们一般都会想到vnc xff0c 但它的安全性不够 xff0c 在这里 xff0c 我将介绍XRDP的安装配置方法 我们可
  • 百度云debian9服务器配置

    首先添加debian国内镜像站https www debian org mirror list 中国大陆 ftp2 cn debian org debian amd64 arm64 armel armhf hurd i386 i386 ia
  • 长江游艇俱乐部算法题

    长江游艇俱乐部在长江上设置了n个游艇出租站1 xff0c 2 xff0c xff0c n 游客可在这些游艇出租站租用游艇 xff0c 并在下游的任何一个游艇出租站归还游艇 游艇出租站i到游艇出租站j之间的租金为r i j 1 lt 61 i
  • [汇编语言]立即数寻址和寄存器寻址

    1 什么是立即数 xff1f 操作数从指令代码中得到 xff0c 即立即数 xff08 Immediate xff09 xff0c 也可以说就是指令的一部分了 xff0c 例如 xff1a MOV EAX span class token
  • git---Git中merge、stash、reset进行版本控制、回退以及暂存修改

    取消某次合并 git span class hljs built in merge span span class hljs comment abort 如果Git版本 gt 61 1 7 4 span git reset span cla
  • iOS 之UIImageView实现图片的移动和缩放

    因为种种原因 xff0c 需要在iphone应用中实现图片查看功能 xff0c 由于iphone屏幕支持多点触摸 xff0c 于是是想到用 手势 来实现图片的实时缩放和移动 借鉴无所不在的internet网络资料之后 xff0c 终于实现此
  • ASCII-Generator.site在线生成ASCII艺术字符图

    什么是 ASCII Generator site ASCII Generator site 是一个 Django 网站 xff0c 用于从图像或文本中生成 ASCII 艺术字符图 x1f3a8 什么是 Django xff1f Django
  • 使Apache服务器URL支持中文

    文章地址https blog csdn net wc250025 article details 110822265 基本法 想要Apache的URL中支持中文 xff0c 需要安装mod encoding模块 网上大部分文章都是在用老的版
  • W: GPG 错误:http://ppa.launchpad.net lucid Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY FAF69C646FF368B7的问题

    在安装更新时 xff0c 即在运行 xff0c 命令行sudo apt get update 或者运行更新管理器的时候 xff0c 出现W GPG 错误 xff1a http ppa launchpad net lucid Release
  • WEEK8 周记 作业——kosaraju模拟&DFS序_班长竞选

    WEEK8 周记 作业 kosaraju模拟 amp DFS序 班长竞选 一 题意 1 简述 大学班级选班长 xff0c N 个同学均可以发表意见 若意见为 A B 则表示 A 认为 B 合适 xff0c 意见具有传递性 xff0c 即 A
  • WEEK11 周记 作业——DP0-1背包问题_东东开车了

    一 题意 1 简述 东东开车出去泡妞 在梦中 xff0c 车内提供了 n 张CD唱片 xff0c 已知东东开车的时间是 n 分钟 xff0c 他该如何去选择唱片去消磨这无聊的时间呢 假设 CD数量不超过20张 没有一张CD唱片超过 N 分钟
  • c语言结构体嵌套的对齐方式

    1 xff1a 在代码中有结构体嵌套的方式 xff0c 又需要获取每个变量的地址 那么需要了解结构体嵌套和单一结构体的一些对齐方面的规则 2 xff1a 对于嵌入式的设备来说 xff0c 对齐很重要 xff0c 有些cpu不支持不对齐的访问