alignment fault

  • 问题现象
  • 问题原因
  • 解决方法

问题现象

最近在调试程序的时候,发现会有异常退出情况,错误提示为:alignment fault。
通过gdb 调试发现是在std::cout 是对double类型的输出有问题,导致了此次的alignment fault。

问题原因

在我的程序中用到了1字节对齐,结构体内容大体上像下面这种结构,导致了double夸字节访问,
在ARM处理器中对非对齐内存访问不是特别友好。
alignment fault具体介绍参考另一篇博客

#param pack(1)
struct test
{char testc;double testd;
};
#param pack()

测试时还发现,正常使用没有问题,但是通过流输出是就会出现异常。
正常使用:

struct test mT;
if(mT.testd > 3.44)
{}

解决方法

为了能够通过流进行输出,最后通过封装一层结构,达到内存对齐。
如此封装之后就可以正常使用了,因为double达到了8字节对齐。

#param pack(1)
struct test
{char testc;double testd;
};
struct testFix
{char testFixC[7]struct test testStr;
}
#param pack()

记录一次alignment fault相关推荐

  1. alignment fault

    什么是对齐异常? 简单来说,当CPU访问内存地址时,如果发现访问的地址是不对齐的,硬件(部分)就会自动触发对齐异常.对齐即要求被访问的地址满足其数据类型的位宽要求,比如要访问一个4字节int型的数据, ...

  2. ARM非对齐访问和Alignment Fault

    转载自ARM非对齐访问和Alignment Fault - 者旨於陽 - 博客园 (cnblogs.com) 1.指令对齐 A64指令必须word对齐.尝试在非对齐地址取值会触发PC alignmen ...

  3. 闲聊对齐异常(alignment fault)

    闲话 最近在ARM64环境中遇到了alignment fault,之前没怎么了解过,这次趁分析问题的机会,做了相关了解,还是比较有内容,特此闲聊. 什么是对齐异常? 简单来说,当CPU访问内存地址时, ...

  4. IMX6ULL学习笔记(18)——GPIO中断

    一.中断简介 相比 STM32 的 NVIC,IMX6ULL 的中断控制系统更复杂,它的中断管理器使用的是 GIC V2,GIC V2 的实现方式与我们熟知的 NVIC 差别较大. 1.1 GIC G ...

  5. arm linux kernel 从入口到start_kernel 的代码分析

    Linux系统启动过程分析(主要是加载内核前的动作) 经过对Linux系统有了一定了解和熟悉后,想对其更深层次的东西做进一步探究.这当中就包括系统的启动流程.文件系统的组成结构.基于动态库和静态库的程 ...

  6. imprecise external abort

    文章目录 Background Debug What is imprecise abort? Background CPU: ARMv7 开机到kernel某个固定阶段发生死机,死机信息都是impre ...

  7. Uboot中start.S源码的指令级的详尽解析

    Uboot中start.S源码的指令级的详尽解析 版本:v1.9 Crifan Li 摘要 本文对Uboot中的Start.S的源码的几乎每一行,都进行了详细的解析 本文提供多种格式供: 在线阅读 H ...

  8. Linux内存管理内存映射以及通过反汇编定位内存错误问题

    提到C语言,我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的! 我们需要知道--变量,其实是内存地址的一个抽像名字罢了.在静态编译的程序中,所有的变量名都会在编译时被转成内存地址.机器 ...

  9. Concepts:Stateful Stream Processing

    Stateful Stream Processing 有状态流处理 What is State? 状态是什么? While many operations in a dataflow simply l ...

最新文章

  1. 玩转Docker Ceph集群及对象存储
  2. 【数据分析】太秀了!用Excel也能实现和Python数据分析一样的功能!
  3. setInterval(callback(),time)
  4. 从地址栏中敲入一个网址,到网页显示出来,这个过程经历了什么
  5. 计算机用户文件夹怎么改名称,win10修改用户名文件夹方法_win10怎么改用户文件夹名称-win7之家...
  6. python手写识别系统gui_求大神帮助,怎么用wxpython编写一个数字手写体识别系统!...
  7. LC.234.Palindrome Linked List
  8. 基于单片机设计的遥控数字音量控制D类功率放大器设计
  9. 在 Java 应用程序中访问USB设备
  10. 寻找与黄金分割点最近的商
  11. 我想给我的公众号改个名,好不好嘞
  12. Linux程序包管理命令之rpm
  13. 易企秀HTML5文件,怎么用易企秀制作h5场景秀?
  14. 关于支付宝服务商模式的刷卡支付没有分润的问题
  15. iPhone的设置中,找不到“开发者选项”
  16. hbase基于solr配置二级索引
  17. Minimal Area
  18. 字典破解密码实验(Python3)
  19. 摄影几何基础知识(1)
  20. 无法将“pytest”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

热门文章

  1. 《Dreamweaver CS6 完全自学教程》笔记 第六章:使用表格进行网页布局
  2. 用 TimingLaba(时方校园定时广播系统)软件,实现学校、办公室定时播放体操、上下课(班)铃声、休息音乐
  3. 蓝桥杯单片机——用NE555定时器来测量频率
  4. flutter iOS配置
  5. 会计学原理名词解释和简答
  6. 忻州计算机cad培训,忻州CAD三维建模培训cad三维制图教程
  7. [转]Java 实现 POS 打印机无驱打印
  8. ryu实例---自学习交换机
  9. 他两次都没能感动中国,不知道有没有感动我们[转载]
  10. uni-app自定义组件(数据传递、自定义弹框、自定义图片选择)