您的位置:首页 > 移动开发 > Android开发

Android平台,C/C++代码内存对齐问题(signal SIGBUS Error)

2014-02-17 20:46 295 查看
最近手机版本老出现崩溃,之前出现过,但很偶然。最近出现机率比较高,就跟查一下。

报了signal SIGBUS BUS Error,最终定位在uint32_t i32 = *((uint32_t*)m_data); 这句语出了问题, 确认m_data内存是正确的,并且在PC机上运行是正常的。

后面查到原因是x86架构CPU是支持内存非对齐访问,而手机的CPU采用的是RISC架构,为了提高访问效率,不支持非对齐访问。

也就是说将内存m_data转成无符号整形unit32_t,内存地址需要是4的整数倍。

将uint32_t i32 = *((uint32_t*)m_data)改为

uint32_t i32 = 0;

char* p = (char*)&i32;

for(int i =0;i < 4;i++)

{

p[i] = m_data[i];

}

BUG 修复了,哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: