一直都是编译armabi的。没有不论什么问题,这个架构是软件模拟浮点运算的。

后来看到NDK文档上说armabi-v7a是针对有硬件处理浮点计算的arm cpu的。

于是就改动配置编译armebai-v7a的so文件。

结果是编译没问题。一执行就是crash掉,Fatal signal 7 (SIGSEGV)错误。

进过排查才发现,crash掉的不过对一个浮点变量赋值而已。

仅仅只是,这个浮点内存,是一个连续内存中的一部分。

经过排查才发现。这个so文件使用了浮点指令,须要指针4字节对齐。

举个样例

char*  ptr = malloc(10);
float* f   = (float*) (ptr + 2);
f[0]       = 1.0f;

这里f[0]就会crash掉,使用f指针的訪问操作就报错。由于f指针没有4字节对齐。

malloc能够保证返回的指针是对齐的。对指针的偏移操作,导致指针没有4字节对齐。是很隐蔽的。

究其原因,是由于arm cpu的指令。要求内存訪问是4字节的整数倍,否则就会发生硬件报错。

当我断言代码中一定是这种错误原因的时候。

我做了一个測试,在程序启动的时候,用了以上代码。

然而。然而。并没有crash掉。 我了个fuck啊~

进过我锲而不舍的各种測试和推測,我找到了必然crash的代码。例如以下

char*  ptr = malloc(10);
float* f   = (float*) (ptr + 2);
for (int i = 0; i < 1; i++) {f[0]  = 1.0f;
}
是的。非常奇怪。仅仅有在循环的时候非4字节对齐才会crash,我測试了for和while都是这样。
故事的结局是,我确实有for循环非4字节对齐的赋值代码,改动掉之后,执行就没有问题了。

NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决相关推荐

  1. Android编译出现com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536错误解决办法

    踩过的坑, 以下操作,必须在app module中进行. ========================================== ** Android编译出现com.android.de ...

  2. rtthread 字节对齐问题 int指针访问非对齐地址崩溃

    rtthread 字节对齐问题 int指针访问非对齐地址崩溃 环境: SOC: i.MX RT1050 底板: 野火 RT1052 Kernel: rt-thread 背景: 我正在实现解析udp包, ...

  3. (转)C语言字节对齐

    图片可以在下面的博客中看到. 转自:http://blog.csdn.net/bigloomy/article/details/6633008 可能有不少读者会问,字节对齐有必要拿出来单独写一篇博客嘛 ...

  4. 关于C++中四字节对齐的坑

    最近做一个工程,大体的意思是在程序中定义一个结构,运行中会将结构直接写到文件中,然后另一个程序会用同样的结构读出来.为了验证是写文件的程序的问题还是读文件的程序的问题,用winhex来打开文件,仿照结 ...

  5. 计算机中的字节对齐问题

    [转载]http://www.cnblogs.com/clover-toeic/p/3853132.html 引言 考虑下面的结构体定义: 1 typedef struct{ 2 char c1; 3 ...

  6. 程序人生 | C语言字节对齐问题详解 - 对齐/字节序/位序/网络序等(上)

    本文首发于 2014-07-21 15:32:28 1. 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; int i; }T_FOO; ...

  7. C语言字节对齐问题详解

    转载原文连接:https://www.cnblogs.com/clover-toeic/p/3853132.html C语言字节对齐问题详解 引言 考虑下面的结构体定义: 1 typedef stru ...

  8. C语言字节对齐问题详解(zz)

    http://www.bubuko.com/infodetail-263205.html 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; ...

  9. c语言特殊字符字符串宽度对齐,[转]C语言字节对齐问题详解

    引言 考虑下面的结构体定义: 1 typedef struct{2 charc1;3 shorts;4 charc2;5 inti;6 }T_FOO; 假设这个结构体的成员在内存中是紧凑排列的,且c1 ...

最新文章

  1. 台湾大学林轩田机器学习基石课程学习笔记10 -- Logistic Regression
  2. 多种方法巧妙优化数据库
  3. gnuplot绘图学习
  4. SQL Server 2008空间数据应用系列十一:Bing Maps中呈现GeoRSS订阅的空间数据
  5. firefox与ie 的javascript区别
  6. MFC的GDI绘制坐标问题
  7. STM32F4 + HAL库 + W25Q256的验证
  8. duilib 添加自定义list一例
  9. 电路第五版课后完全答案百度扫描(免费)
  10. 编程,初来乍到,多多关照。
  11. 05JS实现弹性相册
  12. 陀螺仪的简单介绍讲解
  13. C++ windows下判断鼠标点击及获取像素点
  14. 动态连接库和静态链接库
  15. 考研英语近义词与反义词·八
  16. Berkeley DB介绍
  17. oracle查看主备库延迟时间,【分享】Oracle 主备库容灾维护常用的九个SQL
  18. 如何宣传推广自己的博客
  19. 2021.9.24;APP_Designer中高级教程09;和simulink的梦幻联动
  20. SMALE 实验室投稿期刊选择

热门文章

  1. Getting started with caffe questions answers (摘选)
  2. C++ 中复杂的声明
  3. 分布式工具的一次小升级⏫ 1
  4. 7-n!末尾有几个0
  5. 嵌入式系统UBOOT
  6. variable 'xxx' unsafe in 'case'的处理
  7. Chapter 1 First Sight——30
  8. 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)...
  9. item-设置可见性
  10. Go Python 7: 2-Layer Neural Network