2019独角兽企业重金招聘Python工程师标准>>>

编写跨平台代码时,ARM不支持非对齐的内存访问,x86支持,跨平台C++代码容易出现以下问题

sigbus意思是该地址有效,但是总线不能读取,具体错误信息有以下三种

BUS_ADRALN 未对齐的内存

BUS_ADRERR 不存在的物理地址

BUS_OBJERR 硬件错误

BUS_ADRALN 一般是类型转换导致的,比如

由于对齐,多出来的3个字节并没有初始化为0,ptr1按照int来解析内存,能顺利读取到后面3个字节,因为内存是合法的,虽然数据不对,但是对于没有对齐的话,那么按照ptr1的地址解析int 就会出错,因为虽然ptr1指针的地址是合法的,但是只有一个字节,并没有多出3个字节。如果CPU支持非对齐内存的访问的话,把3个字节当做0处理即可,但是部分ARM系列并不支持。这类代码编写跨平台就很容易BUG。

这种问题的解决方案之一是,用sizeof 和 char*最小的 基本数据内存块来对内存解析,

简单粗暴就是memcpy(..,..,sizeof(...));这样一个字节一个字节地拷贝到副本里面

又比如

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/898929

sigbus内存错误相关推荐

  1. c/c++动态检测内存错误利器 - ASan

    ASan,即Address Sanitizer,是一个适用于c/c++的动态内存错误检测器,它由一个编译器检测模块(LLVM pass)和一个替换malloc函数的运行时库组成,在性能及检测内存错误方 ...

  2. Android稳定性系列-01-使用 Address Sanitizer检测原生代码中的内存错误

    前言 想必大家曾经被各种Native Crash折磨过,本地测试没啥问题,一到线上或者自动化测试就出现各种SIGSEGV.SIGABRT.SIGILL.SIGBUS.SIGFPE异常,而且堆栈还是崩溃 ...

  3. 【linux】Valgrind工具集详解(七):Memcheck(内存错误检测器)

    一.概述 Memcheck是一个内存错误检测器.它可以检测C和C ++程序中常见的以下问题: 1.非法内存:如越界.释放后继续访问: 2.使用未初始化的值: 3.释放内存错误:如double-free ...

  4. 动态检测内存错误利器ASan

    ASan,即Address Sanitizer,是一个适用于c/c++程序的动态内存错误检测器,它由一个编译器检测模块(LLVM pass)和一个替换malloc函数的运行时库组成,在性能及检测内存错 ...

  5. Linux启动检测内存条错误,linux检测程序内存泄漏和内存错误

    在linux的开发程序的时候,可以很方便的使用valgrind这个工具方便检测内存泄漏和内存错误. 安装很方便: debian(如ubuntu) sudo apt-get install valgri ...

  6. 内存错误 处理 [CAlayer release]

    再出现内存错误时..重现操作..想可能释放掉的对象delloc中又没有重复释放的对象..再就是屏蔽掉一些准备释放的对象..看看爆机会不会消失..知道..找到导致爆机的被释放对象! 转载于:https: ...

  7. python random.choice报错_如何解决mtrand.RandomState.choice中的内存错误...

    我试图从1e5字符串中抽取1e7个项目,但是出现内存错误.从1e4字符串中抽取1e6项是很好的.我在64位机器上使用4GB RAM,并且不认为我应该在1e7达到任何内存限制.有任何想法吗? $pyth ...

  8. 谈谈如何利用 valgrind 排查内存错误

    谈谈如何利用 valgrind 排查内存错误 - 云+社区 - 腾讯云 (tencent.com) 高性能服务器开发关于Socket编程的内容 - 云+社区 - 腾讯云 (tencent.com)

  9. C语言程序设计 | 动态内存管理:动态内存函数介绍,常见的动态内存错误,柔性数组

    动态内存管理目录: 动态内存函数的介绍 常见的动态内存函数的错误 柔性数组 为什么会有动态内存管理呢 我们在日常使用中,创建一个数组,一个变量时都会开辟空间 如: int a; //在栈上开辟一个四字 ...

最新文章

  1. python 英语翻译 excel_python批量将excel内容进行翻译写入功能
  2. python输出中文加数字_python处理“#”开头加数字的html字符方法
  3. boost::strong_components用法的测试程序
  4. Cocos2d-X中的ZORDER和Tag
  5. JavaWeb——拦截器HandlerInterceptor
  6. java day17 【线程、同步】
  7. 书籍之 Head First HTML与CSS
  8. Ubuntu20.04安装教程
  9. FBreader多端同步心得补充
  10. 作为一名软件测试工程师,需要具备哪些能力?
  11. Lenovo 10w 平板评测
  12. Vue项目实现点击图标拨打电话
  13. 模拟卷Leetcode【普通】714. 买卖股票的最佳时机含手续费
  14. 如何定义一个具有返回值的函数
  15. python 移动平均函数_「EMA系列之I」如何理解EMA指数移动平均值以及Python实现
  16. 机器人HEXA登陆DEFCon黑客大会,上演拆弹竞赛
  17. 使用Webdriver进行自动化测试--ljw
  18. 视频知识点(20)- H264码流如何在SPS中获取宽高信息?
  19. 《算法设计编程实验:大学程序设计课程与竞赛训练教材》——2.4 相关题库...
  20. 水位传感器c语言程序,简单水位报警器(水浸传感器)单片机源码

热门文章

  1. ls -l的编程实现
  2. 刘强东痛批京东中高层用 PPT 欺骗自己,网友:“我领导也天天被写 PPT 的忽悠……”
  3. 计算置信度和置信区间
  4. 使用MACS2进行差异peak分析
  5. Android高级编程(奋斗之小鸟)_PDF 电子书
  6. 2020免费稳定php空间,国外稳定的免费PHP空间byethost.com
  7. POI及EasyExcel操作xls,xlsx文件
  8. JavaScript与垃圾回收(GC)---实现篇
  9. 使用NetTopologySuite将shp文件转为GeoJson格式
  10. linux系统应用管道展望,linux学习——管道