后台开发:核心技术与应用实践1.6.2 结构体、共用体在内存单元占用字节数的计算
1.6.2 结构体、共用体在内存单元占用字节数的计算
一般64位机器上各个数据类型所占的存储空间如下所述。
(1)char:8bit=1byte。
(2)short:16bit=2byte。
(3)int:32bit=4byte。
(4)long:64bit=8byte。
(5)float:32bit=4byte。
(6)double:64bit=8byte。
(7)long long:64bit=8byte。
其中,long类型在32位机器上只占4Byte,其他类型在32位机器和64位机器都是占同样的大小空间。先来看union占用内存单元字节数的计算方法。
【例1.14】 union的字节数计算。
#include<iostream>
using namespace std;
union A{
int a[5];
char b;
double c;
};
int main(){
cout<<sizeof(A)<<endl;
return 0;
}
程序的执行结果是:
24
union中变量共用内存,应以最长的为准,可是例1.14的执行结果却不是预想的20(int a[5],5*4 =20Byte),这是因为在共用体内变量的默认内存对齐方式,必须以最长的double(8Byte)对齐,也就是说应该是sizeof(A)=24。所以将共用体中的int a[5]修改成int a[6]后,结果仍然不变;但如果将int a[5]修改成int a[7],结果就将变成32。
再来看struct的计算方法。
【例1.15】 struct的字节数计算。
#include<iostream>
using namespace std;
struct B{
char a;
double b;
int c;
}test_struct_b;
int main(){
cout<<sizeof(test_struct_b)<<endl;
return 0;
}
程序的执行结果是:
24
这是因为char a的偏移量为0,占用1Byte;double b指的是下一个可用的地址的偏移量为1,不是sizeof(double)=8,需要补足7Byte才能使偏移量变为8;int c指的是下一个可用的地址的偏移量为16,是sizeof(int)=4的倍数,满足int的对齐方式。
故所有成员变量都分配了空间,空间总的大小为1+7+8+4=20,不是结构的节边界数(即结构中占用最大空间的类型所占用的字节数sizeof (double)=8)的倍数,所以需要填充4Byte,以满足结构的大小为sizeof(double)=8的倍数,即24。
再来看一个混合结构体的大小计算。
【例1.16】 一个混合结构体大小的计算。
#include<iostream>
using namespace std;
typedef union{
long i;
int k[5];
char c;
} UDATE;
struct data{
int cat;
UDATE cow;
double dog;
}too;
UDATE temp;
int main(){
cout<<sizeof(struct data)+sizeof(temp)<<endl;
return 0;
}
假设是测试机器是在64位机器上,那么程序的执行结果应该是多少?UDATE是一个union,作为变量公用空间。里面占用字节数最多的变量是int k[5],有20Byte,但它要与long类型的8Byte对齐,所以占用24Byte。所以sizeof(struct data)是24,temp是一个struct,每个变量分开占用空间.依次为int4+UDATE28+double8=40,40是4和8的公倍数,字节已对齐,故sizeof(temp)是40,所以结果是40+24=64。
相关文章
- 数据孤岛是业务效率的无声杀手
- 2023展望:新的一年将给大数据分析领域带来什么?
- 阿里云ADB基于Hudi构建Lakehouse的实践
- 大数据在医疗保健领域的使用案例
- 微软增加说明:KB5021751 更新扫描已经 / 即将过时 Office 过程中不会触碰用户隐私
- 2022 Gartner全球云数据库管理系统魔力象限发布 腾讯云数据库入选
- 场景化、重实操,分享一个实时数仓实践案例
- Arctic的湖仓一体践行之路
- 分布式计算MapReduce究竟是怎么一回事?
- 淘系数据模型治理优秀实践
- 大数据分析对医疗保健的影响
- 当我们说大数据Hadoop,究竟在说什么?
- 2022年及以后大数据的五个发展趋势
- 网易严选离线数仓治理实践
- 2023 年数据治理趋势
- 一份“靠谱”的年度经营计划,你学会了吗?
- 漫谈对大数据的思考
- 测试一下,读懂数据的能力,你有吗?
- 用艺术的眼光探索数据之美
- 聊聊数据分析成果如何落地