memory alignment
memory-alignment
Table of Contents
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.

浙公网安备 33010602011771号