struct变量存储
来源:互联网 发布:淘宝网男装棉服 编辑:程序博客网 时间:2024/06/03 19:06
在没有#pragma pack宏的情况下,结构体中的变量存储遵循以下对齐原则:
原则一:第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从其自身大小的整数倍开始。
原则二:结构体的总大小,也就是sizeof的结果,必须是其内部最大数据成员的整数倍,不足的要补齐。
原则三:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大数据成员大小的整数倍地址开始存储。
上面提到的“数据成员”均指基本数据类型。
#include<stdio.h>struct A{char c;int i;short s;};struct B{int i;char c;short s;};struct C{char c;struct B b;};int main(){printf("sizeof(char)=%d\n",sizeof(char));printf("sizeof(short)=%d\n",sizeof(short));printf("sizeof(int)=%d\n",sizeof(int));printf("sizeof(long)=%d\n",sizeof(long));printf("sizeof(float)=%d\n",sizeof(float));printf("sizeof(double)=%d\n",sizeof(double));printf("sizeof(struct A)=%d\n",sizeof(struct A));printf("sizeof(struct B)=%d\n",sizeof(struct B));printf("sizeof(struct C)=%d\n",sizeof(struct C));}
sizeof(char)=1
sizeof(short)=2
sizeof(int)=4
sizeof(long)=4
sizeof(float)=4
sizeof(double)=8
sizeof(struct A)=12
sizeof(struct B)=8
sizeof(struct C)=12
struct A中char c放在0号位置,int i放在从4(4是sizeof(int)的整倍数)开始的位置,short s放在从8(8是sizeof(short)的整倍数)开始的位置,再根据原则二可得sizeof(struct A)=12。
struct B中int i放在从0开始的位置,char c放在从4开始的位置,short s放在从6开始的位置,所以sizeof(struct B)=8。
struct C中char c放在0号位置,b放在从4开始的位置。
- struct变量存储
- struct成员变量
- 初始化 struct 变量
- 关于struct中的static变量
- struct 中部分变量赋值
- 变量存储
- 变量存储
- 变量存储
- struct 变量 实例转换成byte [] 类型
- struct 不定义变量的使用方法
- 指定struct成员变量的位数
- NSMutableArray中存放struct变量的方法
- 给一个类成员变量struct赋值.
- 动态存储变量和静态存储变量
- 动态存储变量与静态存储变量
- c# struct 变量 到 byte[] 变量的转换操作
- c# struct 变量 到 byte[] 变量的转换操作
- c# struct 变量 到 byte[] 变量的转换操作
- 基于网站风格树SST的网页噪声去除
- Linux I/O复用
- libevent基础
- 分类回归树CART(上)
- 卡特兰数Catalan Number
- struct变量存储
- union变量存储
- 栈溢出
- textview 长文本 跑马灯的实现
- C++继承
- __stdcall和__cdecl的区别
- 大数加法
- 拉格朗日乘子法和KKT条件
- perl中my与local的区别