结构体占内存大小计算
来源:互联网 发布:动态桌面壁纸软件 编辑:程序博客网 时间:2024/06/05 16:26
struct结构体的大小计算:
struct 大小,与pack的大小(在程序中显示设置#pragma pack(),vc6.0默认大小为8)、结构中最大占用有关
struct A
{
int a; 0-3
4-7 要填充(padding)以保证内存对齐的原则
double b; 8-15
char c[9]; 16-24
};
首先给a分配内存,因为int占四个字节<pack大小(8个字节),所以按照4个字节对齐,起始位值为0,0%4=0,a最后占的内存为0-3;
接着给b分配内存,double占8个字节,所以按照8个字节对齐,起始位为8(8%8=0),b为8-15;
最后char占一个字节,所以c为16-24;
因此结构体A的大小为8+8+9 = 25;有因为25不是结构体中最大占用内存类型double类型大小(8)的整数倍,所以A最后的大小是32;
struct B
{
int a;
double b;
double c;
char d;
};
同理,按上面的分析方法确定各个变量在内存中的位置:
a,0-3;
,4-7;
b,8-15;
c,16-23;
d,24;
TOTAL = 25
25 不是8的倍数,所以最后B大小是32;
总结计算结构体的步骤
1.内存对齐与编译器设置有关,首先要搞清编译器这个默认值是多少
2.如果不想编译器默认的话,可以通过#pragma pack(n)来指定按照n对齐
3.每个结构体变量对齐,如果对齐参数n,变量所占字节数(m),内存地址的起始位置%min(n,m)=0。也就是最小化长度规则
4.结构体总大小: 对齐后的长度必须是成员中最大的对齐参数的整数倍。
5.补充:如果结构体A中还要结构体B,那么B的对齐方式是选它里面最长的成员的对齐方式
所以计算结构体大小要走三步,首先确定是当前程序按照几对齐(参照1,2点),接着计算每个结构体变量的大小和偏移(参照3,5),最后计算结构体总大小(参照4)。
struct 大小,与pack的大小(在程序中显示设置#pragma pack(),vc6.0默认大小为8)、结构中最大占用有关
struct A
{
int a; 0-3
4-7 要填充(padding)以保证内存对齐的原则
double b; 8-15
char c[9]; 16-24
};
首先给a分配内存,因为int占四个字节<pack大小(8个字节),所以按照4个字节对齐,起始位值为0,0%4=0,a最后占的内存为0-3;
接着给b分配内存,double占8个字节,所以按照8个字节对齐,起始位为8(8%8=0),b为8-15;
最后char占一个字节,所以c为16-24;
因此结构体A的大小为8+8+9 = 25;有因为25不是结构体中最大占用内存类型double类型大小(8)的整数倍,所以A最后的大小是32;
struct B
{
int a;
double b;
double c;
char d;
};
同理,按上面的分析方法确定各个变量在内存中的位置:
a,0-3;
,4-7;
b,8-15;
c,16-23;
d,24;
TOTAL = 25
25 不是8的倍数,所以最后B大小是32;
总结计算结构体的步骤
1.内存对齐与编译器设置有关,首先要搞清编译器这个默认值是多少
2.如果不想编译器默认的话,可以通过#pragma pack(n)来指定按照n对齐
3.每个结构体变量对齐,如果对齐参数n,变量所占字节数(m),内存地址的起始位置%min(n,m)=0。也就是最小化长度规则
4.结构体总大小: 对齐后的长度必须是成员中最大的对齐参数的整数倍。
5.补充:如果结构体A中还要结构体B,那么B的对齐方式是选它里面最长的成员的对齐方式
所以计算结构体大小要走三步,首先确定是当前程序按照几对齐(参照1,2点),接着计算每个结构体变量的大小和偏移(参照3,5),最后计算结构体总大小(参照4)。
0 0
- 结构体占内存大小计算
- 结构体占内存大小计算
- 如何计算结构体所占内存大小
- struct结构体占内存大小计算
- struct结构体占内存大小计算
- struct结构体占内存大小计算
- 结构体中,占内存大小
- 基础备忘:结构体、指针所占的内存大小
- C++中 类 和 结构体所占内存大小
- C++ 类和结构体所占内存大小
- C++类所占内存大小计算
- C++类所占内存大小计算
- C++类所占内存大小计算
- C++类的所占内存大小计算)
- C++类所占内存大小计算
- sizeof计算对象所占内存大小详解
- C++类所占内存大小计算
- C++类所占内存大小计算
- LeetCode: Binary Tree Level Order Traversal II
- 快速排序
- BitmapFactory.Options 解决加载大图片OOM
- 【网络安全】移动软件逆向集成工具包Santoku
- 【Qt入门实践】数据库xml操作
- 结构体占内存大小计算
- <<Signals and systems>> Chapter 2 学习笔记
- 《CSS权威指南》计算机电子书下载
- object 工具类 判断实体中属性值是否都为空 将实体Stirng类型为null的值替换
- libgdx环境搭建及测试
- 触发器--再次出发
- css小技巧-Mozilla建议的CSS书写顺序
- 归并排序
- 美商婕斯的赋活青春精华露真的很厉害啊!!