什么叫字节对齐?
假如一个数据是以能被4 整除的地址开端的接连存储,那么它便是字对齐,不然便对错字对齐。举例说明四字节对齐:对内存进行操作时,被拜访的地址有必要为4的倍数。假如分配到的地址的地址不是4的倍数时,CPU实践拜访的地址仍是依照字对齐的方法来操作。
用ADS的ARMC Complier下Optimization Level或许引起问题,其间的一个问题便是字节对齐的问题。下面讲讲问题的现象及本质。
其时问题的现象是:程序运用一公共变量Buf创立行列,假如ADS编译优化选项选用Minium则软件作业正常;源码不变,假如选用ALL优化,则不正常,数据紊乱且无法作业。为了发现问题,咱们分别用Minium和ALL编译,在反汇编条件下单步盯梢程序,调查CPU寄存器和内存变量的改变状况。
当内存开始地址为4字节对齐地址的状况时,编译器分配地址和实践地址共同,因而不存在上述问题。
结 论:
在ARM嵌入式体系中,当把一个内存区域初始化为某个结构体时,有必要留意字节对齐的状况。假如该内存开始地址为非对齐地址,不只得不到预期的成果,还或许导致一些很古怪的让人无法了解外表问题。在C层面上不太简单调查到这些问题的本质,只要深化到汇编一层去剖析程序,才或许了解这些现象的深层原因。