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 修复了,哈哈
报了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 修复了,哈哈
相关文章推荐
- c++内存中字节对齐问题详解
- C语言、C++内存对齐问题详解
- c++内存中字节对齐问题详解
- c++内存中字节对齐问题详解
- c++内存对齐问题
- (Boolan) C++ 类型大小和内存分布(虚函数指针、虚表、内存对齐问题)
- c++内存中字节对齐问题详解
- C/C++中关于struct内存对齐问题
- 关于pragma pack的用法(四) C++中的内存对齐问题
- c++内存中字节对齐问题详解
- C/C++中关于struct内存对齐问题
- c++内存中字节对齐问题详解 【转载】
- Linux环境下android平台调试native代码, 从java debug 到C++ (NDK DEBUG)
- c++内存中字节对齐问题详解 [ 转载 ]
- c++中内存对齐问题详解
- [C++] struct 内存对齐问题
- C#调用C++ 平台调用P/Invoke 结构体--内存对齐方式、union封装【七】
- Linux环境下android平台调试native代码, 从java debug 到C++ (NDK DEBUG)
- 【C++】内存中字节对齐问题详解
- c++继承应用->写一套代码跨越IOS和Android两个平台