memory alignment
2015-08-19 15:59
323 查看
memory-alignment
Table of Contents
1. Conclusion2. 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-generic3.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.0R0014.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.
相关文章推荐
- Javascript规范
- 桌面支持--电脑显示器变横了
- 鼠标移上去出现显示层,并且出现在同一个div中
- c++中static总结
- hdu 5288 思维技巧
- 支付宝接口回调增加自定义参数
- MAC环境下生成Apple证书教程
- Windows Server 2003 终止服务后的一个月,想它想它想它...
- Win10系统 JDK环境变量配置方法
- [242] Valid Anagram
- Web交互设计优化的简易check list
- 桌面支持--调整win7显示性能
- 限制nginx、apache+php文件上传大小
- POJ_1961 Period(KMP)
- c++ primer plus 第九章《编程题9.6.2》
- aauto学习系列之<11>类
- Linux中的likely()和unlikely()
- iOS安装svn
- 桌面支持--密码永不过期--AD里面改(不然改密码的时候不会显示第一次登录改密码
- 动态调用动态库方法 c/c++ linux windows