问题现象
最近在调试程序的时候,发现会有异常退出情况,错误提示为:alignment fault。
通过gdb 调试发现是在std::cout 是对double类型的输出有问题,导致了此次的alignment fault。
问题原因
在我的程序中用到了1字节对齐,结构体内容大体上像下面这种结构,导致了double夸字节访问,
在ARM处理器中对非对齐内存访问不是特别友好。
alignment fault具体介绍参考另一篇博客
#param pack(1)
struct test
{
char testc;
double testd;
};
#param pack()
测试时还发现,正常使用没有问题,但是通过流输出是就会出现异常。
正常使用:
struct test mT;
if(mT.testd > 3.44)
{}
解决方法
为了能够通过流进行输出,最后通过封装一层结构,达到内存对齐。
如此封装之后就可以正常使用了,因为double达到了8字节对齐。
#param pack(1)
struct test
{
char testc;
double testd;
};
struct testFix
{
char testFixC[7]
struct test testStr;
}
#param pack()