怎么做网站登录站,怎么做souq网站,网页制作的内容,开发一个网站 要多久一直都是编译armabi的。没有不论什么问题#xff0c;这个架构是软件模拟浮点运算的。后来看到NDK文档上说armabi-v7a是针对有硬件处理浮点计算的arm cpu的。 于是就改动配置编译armebai-v7a的so文件。 结果是编译没问题。一执行就是crash掉#xff0c;Fatal signal 7 (SIGSEG… 一直都是编译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字节对齐的赋值代码改动掉之后执行就没有问题了。