关于C语言字节对齐问题的解释

2023-11-18

对于字节对齐问题一直有所疑惑,在网上搜寻资料也是看的迷迷糊糊。看了这位大神的分析,才真正结了我的困惑。
在这里插入图片描述

原文链接

https://mp.weixin.qq.com/s/WRaJQ8gD22OhLPvhM0dHew?

https://mp.weixin.qq.com/s/Lj7uTdgjYoA3ZbGyUJXI9w?

https://mp.weixin.qq.com/s/mFvBXRNrJBB-kdFtOyKutg?

总结

  1. 如果我们没有给出特别的指示,编译器会倾向于:
  • 将uint32_t(4个字节)的变量放到被4整除的地址上,0x0、0x4、0x8、0xC…,也就是我们常说的对齐到字(Word Aligned);
  • 将uint16_t(2个字节)的变量放到能被2整除的地址上,0x0、0x2、0x4…也就是我们常说的对齐到半字(Half-word Aligned);
  • 将uint64_t(8个字节)的变量放到被8整除的地址上,0x0、0x8… 也就是我们常说的对齐到双字(Double Word Aligned);
  1. Cortex-M0/M0+不支持非字节对齐,Cortex-M3/M4/M7支持非字节对齐。
  2. 可通过__packed直接告诉编译器对目标数据的访问是非对齐的。
  3. 在ARM Compiler里面,结构体的对齐使用以下规则:
  • 整个结构体,根据结构体内最大的那个元素来对齐。比如,整个结构体内部最大的元素是WORD,那么整个结构体就默认对齐到4字节。
  • 结构体内部,成员变量的排列顺序严格按照定义的顺序进行。
  • 结构体内部,成员变量自动对齐到自己的大小——这就会导致空隙的产生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于C语言字节对齐问题的解释 的相关文章

  • QT 中的延时函数和精准定时器的用法

    一 QT中的延时函数比较常用的三种方法 第一种 void MainWindow Delay int msec 这个最准 非阻塞方式延时 现在很多人推荐的方法 QEventLoop loop QTimer singleShot msec lo
  • 知识点——初识java中File类

    1 1 什么是File类 SUN公司提供给开发者操作文件和文件夹的一个类对象 Java中万物皆对象 计算机中万物皆文件 获取File类有三种方式 Constructor 构造方法 File String pathName 根据对应的文件路径
  • 95-31-020-ChannelGroup-DefaultChannelGroup

    1 拓扑图
  • HT1621B液晶驱动(附电路图)

    最近做了一个项目用到了HT1621 电路图 datasheet code HT1621B datasheet include ht1621 h void ht1621 send high order data UCHAR data UCHA
  • JS实现数组扁平化的 5 种方式

    一 普通递归的思路很容易理解 就是通过for循环的方式 逐层逐个元素地去展平 如果当前元素是一个数组 那么就对它进行递归处理 再将递归处理的结果拼接到结果数组上 let arr 1 2 3 4 5 function flatten arr

随机推荐

  • 【简易广告机】利用树莓派制作一个简易的广告机(1)

    利用树莓派做一个简单的广告机 废话不多说开始 1 安装 omxplayer omxplayer 简易介绍 omxplayer是专门针对树莓派的GPU的播放器 支持硬件解码 最高支持分辨率是1080P omxplayer这个命令行播放器 是专
  • 怎么修改vue项目图标和标题

    要修改 Vue 项目的图标和标题 需要在 Vue 项目的 public 目录下添加 favicon ico 文件作为图标 并在 index html 中通过标签修改标题 具体步骤如下 在 public 目录下添加图标 favicon ico
  • 【环境配置】Collecting package metadata (current_repodata.json): failed的问题解决

    在使用conda创建新环境时 出现Collecting package metadata current repodata json failed的问题 尝试了很多方法都没有解决 最后解决了 解决链接 https download csdn
  • JPEG编码过程详解

    JPEG编码过程详解 本文旨在对JPEG编码过程中的细节步骤进行说明 具体原理部分请参照Wikipedia 色彩空间转换 原始图像的像素点是以RGB形式存储的 即每个像素点由3个字节的数据组成 分别为Red通道 Green通道和Blue通道
  • sqlite数据库查看里面数据库版本号

    在android sqlite数据库开发中 常会把手机上的具体数据库拷贝到电脑上进行查看 而数据库升级也比较多 升级也容易出问题 如果有时候某个用户报了一个bug或者测试测出一个bug 然后把他的数据库 db文件拷贝给你 这时候你需要先确定
  • 多线程:多个线程共享数据

    在 Java 传统线程机制中的共享数据方式 大致可以简单分两种情况 多个线程行为一致 共同操作一个数据源 也就是每个线程执行的代码相同 可以使用同一个 Runnable 对象 这个 Runnable 对象中有那个共享数据 例如 卖票系统就可
  • 更进一步!可视化一切递归算法!

    学算法认准 labuladong 后台回复课程查看精品课 点击卡片可搜索文章 在线学习网站 https labuladong gitee io algo 上次我发布了算法代码可视化功能 适配了我的网站和我的系列插件 最近我修复了一些 bug
  • 有测试辐射的软件,装个可以查看辐射的APP应用,测测你的手机辐射有多大

    近日关于一款检测手机辐射量的应用Tawkon开始受到媒体和用户关注 这款软件早在去年就已经准备推出iOS版本 最终因为苹果API限制被帮主拒绝 随后他们又开始准备Android版本 并于近日正式发布 手机辐射到现在依然是一个争议性话题 没有
  • 使用指针实现: 输入两个字符串,将这两个字符串连接后输出。

    使用指针实现 输入两个字符串 将这两个字符串连接后输出 include
  • SpringSecurity解决跨域问题的方法

    跨域问题产生原因 现在越来越多的项目都采用前后端分离的开发模式 以实现前后端代码解耦的目的 处于安全考虑 后端服务器对收到的请求进行了限制和区分 因此出现跨域访问不到数据的情况 什么是跨域 当协议 域名 端口号 有一个或多个不同时 前端请求
  • Jira、Redmine横向对比:哪个更适合做研发项目管理

    如果你是一个软件开发团队的成员或者负责人 你可能会遇到这样的问题 该选择哪种项目管理和协作工具来提高工作效率和质量 市面上有很多这样的工具 比如 Redmine 和 Jira 它们都有各自的优缺点 适合不同的场景和需求 本文将从以下几个方面
  • nginx之虚拟主机与请求的分发

    由于IP地址有限 因此经常存在多个主机域名对应同一个IP地址的情况 这时nginx conf中就可以按照server name 对应用户请求中的主机域名 并通过server块来定义虚拟主机 每个server块就是一个虚拟主机 它只处理与之相
  • spring boot学习:yaml配置文件

    实际上配置文件application properties还有application yaml application yml 我自己实际使用中 就是感觉用yaml能省不少 但是要注意换行空格符号 举个例子有两个属性 server port
  • Thread Local Storage---__thread 关键字的使用方法

    转自 http blog csdn net yusiguyuan article details 22938671 thread是GCC内置的线程局部存储设施 存取效率可以和全局变量相比 thread变量每一个线程有一份独立实体 各个线程的
  • 使用 VS Code SSH 到远程服务器进行开发

    一 引言 最近在搜索有关自带 ssh ftp ssh 功能的编辑器 没想到竟然又搜回到了 VS Code 二 转发 这里转发 VS Code 的一篇介绍 Remove Developing 的文章 里面使用了 Remote SSH 插件基本
  • matplotlib多纵轴_python画图初学--matplotlib

    适用者 有一定的python基础 会逐渐学习更多matplotlib的实例 实验环境 python3 6 1 安装依赖包 pip 2 导入依赖包 import numpy as np import matplotlib pyplot as
  • dedeCms恢复数据库后乱码

    好久没做网站了 最近看到不少模板源码 于是下了些来玩 找了个免费无任何限制只带广告的国外空间 但是在dedeCMS恢复数据乱码时出现了问题 都是知道这玩意就是编码的问题 不过不细心的人在使用dedeCMS可能会由于恢复数据时勾上了 还原表结
  • Ubuntu18.04环境下Gtest框架安装测试

    准备 在安装Gtest框架之前在linux上安装好cmke g 工具 sudo apt get install cmake sudo apt get install g 方法一 下载Gtest压缩包解压安装 最新版本的Gtest下载链接 h
  • 数字怎么横 竖排_(Excel中如何将竖着排列的数字变成横着排列。)excel表格竖着的数据变横...

    Excel中如何将竖着排列的数字变成横着排列 1次演示使用的软件为Excel表格 使用本为office家庭和版2016 2 首先打开Excel电子表格 并在表格中输入一列竖着排列的数字 3 选择这列竖排的数字 进行复制 然后在其他行单击鼠标
  • 关于C语言字节对齐问题的解释

    对于字节对齐问题一直有所疑惑 在网上搜寻资料也是看的迷迷糊糊 看了这位大神的分析 才真正结了我的困惑 原文链接 https mp weixin qq com s WRaJQ8gD22OhLPvhM0dHew https mp weixin