字节对齐

来源:互联网 发布:qq群推广淘宝客链接 编辑:程序博客网 时间:2024/06/02 07:03

Dcache 在clean和invalid时需要cache line对齐,要求申请的mem要cache line 对齐

_align(32) u8 mem1base[MEM1_MAX_SIZE];            
__align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));    
类似这个,定义了2个u8的内存池,我硬件调试了下,发现他们每一个数组里面u8数据和u8数据都是挨着的,并不是一个u8占了32个字节,剩下的填充不用。也就是他们占了MEM1_MAX_SIZE和MEM2_MAX_SIZE个空间,而不是MEM1_MAX_SIZE*32和MEM2_MAX_SIZE*32个。也就是这个32字节对齐对于他们数组内部的数据存储是没有什么作用的。

这个字节对齐,首尾都要对齐,我的看法是对于第一个 __align(32) u8 mem1base[MEM1_MAX_SIZE]是内部内存池,加上32字节对齐后,内存为他分配的首地址就是32倍数的地址,然后内存块是32个一块。
加上这个__align(32)使得他分配出来的地址全部都是32字节对齐的,也就是地址是32的倍数。然后分配到的空间,4,8,16,32字节对齐都可以使用。

对于第二个__align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000))),我们已经为他分配了首地址了,而且分配的首地址已经是32字节对齐的了,所以我们把这一个__align(32)去掉也是没问题的



http://www.openedv.com/thread-84387-1-1.html

0 0
原创粉丝点击