struct中的字节对齐问题
2015-11-19 21:01
369 查看
原因:CPU为了快速的存取内存从而存在内存问题
分析方法:
有例子1:[code]#include <stdio.h> struct A{ char a2; char a3; char a; short i; }; int main(int argc, const char *argv[]) { struct A aa = {0x1, 0x2, 0x3, 0x5555}; char *p = &aa; int i; printf("sizeof(struct A) = %d\n", sizeof(aa)); for (i = 0; i < sizeof(aa); i++) { printf("%#x ", *p); p++; } putchar(10); return 0; }
执行结果是:
sizeof(struct A) = 6
0x1 0x2 0x3 0 0x55 0x55
例子2:
[code]#include <stdio.h> struct A{ short b; char a; int c; }; int main(int argc, const char *argv[]) { char array[100] = {0x0,0x0,0,0,0,0,0,0,0}; struct A *aa = (struct A *)array; aa->b = 0x1122; aa->a = 0x33; aa->c = 0x01223344; int i; printf("sizeof(struct A) = %d\n", sizeof(struct A)); for (i = 0; i < sizeof(struct A); i++) { printf("%#2x ", array[i]); } putchar(10); return 0; }
执行结果是:
sizeof(struct A) = 8
0x22 0x11 0x33 0 0x44 0x33 0x22 0x1
如果结构体是这种:
[code]struct A{ char a; //这两个位置互换 short b; //至两个位置互换 int c; };
sizeof(struct A) = 8
0x33 0 0x22 0x11 0x44 0x33 0x22 0x1
结论/方法:
当一个结构体中有不同的数据时,在 linux 中遵循 1,2,4的对齐方式,注意没有 8结构体中的占字节数最多的元素决定二维容器的宽度
一栏里边总是对齐1,2,4原则里的最大的
图形表示:
在程序一和程序二中内存的情况是:相关文章推荐
- 苹果iPhone手机在升级时出现意外,开不了机怎么办?
- 纹理映射
- HDOJ--2767--Proving Equivalences
- 利用通知实现App从推送消息启动的页面跳转
- Java 连接数据库及字符编码
- 【Linux学习笔记】栈与函数调用惯例 http://blog.csdn.net/xiaogugood/article/details/38490663
- 鼠标拖动视图
- 邻接表-C++
- <string>和<string.h>的区别?
- android webview cookie 同步时有时候会出现同步不成功的问题解决
- 文章标题
- Linux内核地址映射模型 http://blog.csdn.net/f22jay/article/details/7925531
- UI - UIPickerView
- 设置面板背景
- win7下安装centOS7双系统
- TCP 三次握手,四次分手
- validator
- Linux下的MySql安装等(系统:Ubuntu)
- java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
- 2015 NOIP day2 t2 信息传递 (tarjan 连通图)