您的位置:首页 > 其它

memory alignment

2015-08-19 15:59 323 查看


memory-alignment

Table of Contents

1. Conclusion

2. Test Program

3. Memory Alignment in ubuntu14.04 i386

3.1. kernel version

3.2. result

4. Memory Alignment in Arm DM368

4.1. kernel version

4.2. result

1 Conclusion

Make sure memory alignment by 4 bytes. Especially for Embedded development.

2 Test Program

#include <stdio.h>

// not alignment for 4B

int main()
{
int i = 0;
unsigned char buf[8];

for (i = 0; i < 8; i++) {
buf[i] = i;
printf("buf[%d] = 0x%x\n", i, buf[i]);
}

for (i = 0; i < 5; i++)
printf("*(int *)&buf[%d] = 0x%x\n", i, *(int *)&buf[i]);

return 0;
}


3 Memory Alignment in ubuntu14.04 i386

3.1 kernel version

3.13.0-62-generic

3.2 result

buf[0] = 0x0
buf[1] = 0x1
buf[2] = 0x2
buf[3] = 0x3
buf[4] = 0x4
buf[5] = 0x5
buf[6] = 0x6
buf[7] = 0x7
*(int *)&buf[0] = 0x3020100
*(int *)&buf[1] = 0x4030201
*(int *)&buf[2] = 0x5040302
*(int *)&buf[3] = 0x6050403
*(int *)&buf[4] = 0x7060504


4 Memory Alignment in Arm DM368

4.1 kernel version

2.6.37IPNCDM3685.1.0R001

4.2 result

buf[0] = 0x0
buf[1] = 0x1
buf[2] = 0x2
buf[3] = 0x3
buf[4] = 0x4
buf[5] = 0x5
buf[6] = 0x6
buf[7] = 0x7
*(int *)&buf[0] = 0x3020100
*(int *)&buf[1] = 0x30201
*(int *)&buf[2] = 0x1000302
*(int *)&buf[3] = 0x2010003
*(int *)&buf[4] = 0x7060504


we can see when we reference 4B content from &buf1, &buf2 and &buf3, we get the wrong value.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: