NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决
一直都是编译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;
}
NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决相关推荐
- Android编译出现com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536错误解决办法
踩过的坑, 以下操作,必须在app module中进行. ========================================== ** Android编译出现com.android.de ...
- rtthread 字节对齐问题 int指针访问非对齐地址崩溃
rtthread 字节对齐问题 int指针访问非对齐地址崩溃 环境: SOC: i.MX RT1050 底板: 野火 RT1052 Kernel: rt-thread 背景: 我正在实现解析udp包, ...
- (转)C语言字节对齐
图片可以在下面的博客中看到. 转自:http://blog.csdn.net/bigloomy/article/details/6633008 可能有不少读者会问,字节对齐有必要拿出来单独写一篇博客嘛 ...
- 关于C++中四字节对齐的坑
最近做一个工程,大体的意思是在程序中定义一个结构,运行中会将结构直接写到文件中,然后另一个程序会用同样的结构读出来.为了验证是写文件的程序的问题还是读文件的程序的问题,用winhex来打开文件,仿照结 ...
- 计算机中的字节对齐问题
[转载]http://www.cnblogs.com/clover-toeic/p/3853132.html 引言 考虑下面的结构体定义: 1 typedef struct{ 2 char c1; 3 ...
- 程序人生 | C语言字节对齐问题详解 - 对齐/字节序/位序/网络序等(上)
本文首发于 2014-07-21 15:32:28 1. 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; int i; }T_FOO; ...
- C语言字节对齐问题详解
转载原文连接:https://www.cnblogs.com/clover-toeic/p/3853132.html C语言字节对齐问题详解 引言 考虑下面的结构体定义: 1 typedef stru ...
- C语言字节对齐问题详解(zz)
http://www.bubuko.com/infodetail-263205.html 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; ...
- c语言特殊字符字符串宽度对齐,[转]C语言字节对齐问题详解
引言 考虑下面的结构体定义: 1 typedef struct{2 charc1;3 shorts;4 charc2;5 inti;6 }T_FOO; 假设这个结构体的成员在内存中是紧凑排列的,且c1 ...
最新文章
- 台湾大学林轩田机器学习基石课程学习笔记10 -- Logistic Regression
- 多种方法巧妙优化数据库
- gnuplot绘图学习
- SQL Server 2008空间数据应用系列十一:Bing Maps中呈现GeoRSS订阅的空间数据
- firefox与ie 的javascript区别
- MFC的GDI绘制坐标问题
- STM32F4 + HAL库 + W25Q256的验证
- duilib 添加自定义list一例
- 电路第五版课后完全答案百度扫描(免费)
- 编程,初来乍到,多多关照。
- 05JS实现弹性相册
- 陀螺仪的简单介绍讲解
- C++ windows下判断鼠标点击及获取像素点
- 动态连接库和静态链接库
- 考研英语近义词与反义词·八
- Berkeley DB介绍
- oracle查看主备库延迟时间,【分享】Oracle 主备库容灾维护常用的九个SQL
- 如何宣传推广自己的博客
- 2021.9.24;APP_Designer中高级教程09;和simulink的梦幻联动
- SMALE 实验室投稿期刊选择
热门文章
- Getting started with caffe questions answers (摘选)
- C++ 中复杂的声明
- 分布式工具的一次小升级⏫ 1
- 7-n!末尾有几个0
- 嵌入式系统UBOOT
- variable 'xxx' unsafe in 'case'的处理
- Chapter 1 First Sight——30
- 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)...
- item-设置可见性
- Go Python 7: 2-Layer Neural Network