最近花了几天调出来NDK开发中的一个Bug,先看log日志:
03-24 15:37:04.373: A/libc(21474): Fatal signal 7 (SIGBUS) at 0x52d26f1a (code=1), thread 21474 (ample.speechapi)
在c++中用一个float指针指向地址0x52d26f1a,一读取就有SIGBUS异常。
在电脑上的x86 cpu架构可以通过读前面四字节后面四字节,取出中间四字节的float变量,但是在移动设备上用的是ARM架构,不支持在非四字节对齐的地址上读一个float。
解决办法:人工在0x52d26f1a前加两个字节的padding。