结构体占用字节数及存储与空间分配(转)
来源:互联网 发布:快递单号记录软件 编辑:程序博客网 时间:2024/06/02 12:57
我们都知道在数据类型中,char类型占1个字节,short占2个字节,int占4个字节,long占8个字节等等。
在计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小,下面我们看几个例子:
1.
struct A
{
char a;
int b;
short c;
}str1;
这里char占1个字节,int占4个字节,short占2个字节,按单元存放如下图:
由于a占用了1个字节,b存不下,所以开辟新的单元存放b,然后再开辟新的单元存放c。
从这里可以看出结构体在内存中是按单元存放的,总占用字节数就是3*4=12。
2.
struct B
{
char a;
short c;
int b;
}str2;
存放如图:
在这里由于b占用4个字节,而a和c总共才占用3个字节,足够c存放,所以c存放在a的后面,再开辟新的单元存放b。
此例中占用字节数为2*4=8。
3.
struct c
{
char a;
char b[2];
char c[4];
}str3;
存放如图:
这里由于数据类型都为char类型,故不必再开辟新的单元,一行存完。
占用字节数为1*1+2*1+4*1=7。
综上所述,结构体在内存中存放是按单元存放的,所开辟单元的最大长度取决于占字节最大的数据类型,此外我们可以发现存储顺序对空间的使用率有一定的影响。
从以上三例可以看出,第一种最浪费空间;第三种最节省空间,但全使用相同类型,丢失了字段本生的数据类型,不方便使用;第二种介于第一种和第三种写法之间,其空间上比较紧凑,同时又保持了结构体中字段的数据类型。大家可以尝试用sizeof()去深入了解结构体中的按单元存放。
- 结构体占用字节数及存储与空间分配(转)
- 【C语言】结构体存储与空间分配
- Ansi与Unicode编码的转换及占用字节数
- C进阶_1:结构体所占用的字节数
- 文件大小与占用空间大小(附带字节转KB,MB公式)
- mysql 数据类型及占用字节数
- 结构体的内存空间分配及字节对齐
- 结构体的空间占用
- 结构体的空间占用
- 结构体的空间占用
- 结构体存储分配
- 类型占用字节空间
- C语言结构体所占用的字节数如何计算
- C语言中结构体和共同体在内存中占用字节数
- linux C编程(四)int占用字节数/大小端模式/数据类型自动转换/结构体内存占用
- 结构体、分配空间问题
- 关于C语言字节对齐之结构体 共用体占用字节数的快速计算方法总结
- [转] c# 数据类型占用的字节数
- 【P-oj】-Fibonacci(矩阵)
- 高德地图API练习
- 程序中插入数据库出现乱码问题
- LeetCode_461-hamming distance
- mqtt发布端代码
- 结构体占用字节数及存储与空间分配(转)
- manifest.xml微擎系统模块的安装文件内容
- 华为OJ 字符串运用-密码截取
- POJ1338 Ugly Numbers
- Probabilistic decoder, Bayesian neural network, Probabilistic encoder
- java学习
- 通过jdbc访问mysql数据库的具体过程及简单查询
- leetcode_169. Majority Element
- leetcode#121#122#123 Best Time to Buy and Sell Stock