关于VC下结构体内存对齐问题
来源:互联网 发布:电商搜索排序算法 编辑:程序博客网 时间:2024/04/28 11:49
#include <stdio.h>//pragma pack(8)int main(){struct key{ int a;char b;long double c;char d;}kk;struct key1{int a;char b;int c;}kk1;struct key2{char a;char b;char c;}kk2;printf("%d\n",sizeof(struct key));printf("%d\n",sizeof(struct key1));printf("%d\n",sizeof(struct key2));printf("%p %p %p %p\n",&kk.a, &kk.b, &kk.c, &kk.d);printf("%p %p %p\n",&kk1.a, &kk1.b, &kk1.c);printf("%p %p %p\n",&kk2.a, &kk2.b, &kk2.c);return 0;}
输出结果:
1. key的长度是24个字节的存储空间,key1是12个字节,key2是3个字节;key中最大的成员long double类型变量是c,大小是8个字节,key1中最大的成员变量是int类型变量,大小是4个字节,key2最大的是char类型变量,大小是1字节。所以我们可以知道每个结构体的对齐系数是自己最大的成员变量。key是8,key1是4,key2是1.
2. 观察三个结构体成员变量的地址:
key.a的地址是28,key.b是2c,key.c是30,key.d是38:a是Int类型,占4个字节,所以b的地址是2c,c的大小是8个字节,第一个8空间已被a和b占去5个字节大小,容不下c,所以c重启一个8空间,所以其地址是在结构体首地址+8,c刚好占满一个8空间,所以d需要重启一个8空间,地址是首地址+8+8.
key1.a的地址是14,key.b是18,key.c是1c:同理,对齐系数是4.
0 0
- 关于VC下结构体内存对齐问题
- 关于结构体内存对齐的问题
- 关于c++结构体内存对齐问题
- 关于结构体内存对齐
- 关于结构体内存对齐
- 关于结构体内存对齐
- 关于结构体内存对齐
- 关于结构体内存对齐
- 结构体内存对齐问题
- 结构体内存对齐问题
- 结构体内存对齐问题
- 结构体内存对齐问题
- 结构体内存对齐问题
- 结构体内存对齐问题
- 结构体内存对齐问题
- 关于结构体内存的对齐方式
- 关于结构体内存对齐方式
- 结构体内存对齐问题(转)
- Mysql事务处理问题
- Java 网络文件传输
- 设计模式-系列索引
- linux 管道
- 寻找兄弟单词
- 关于VC下结构体内存对齐问题
- JSON返回DateTime/Date('123123123')/解决办法
- struts2国际化
- 面试经典(14)--二叉树镜像
- pid,ppid,pgid,sid,tpgid,tty,pipeline,&
- storm--流式分布式系统介绍
- hadoop-2.2.0全分布集群安装与配置(接上篇伪分布式)
- POJ 2240 Arbitrage(Floyd)
- Win7编译HIVE trunk 源码