sizeof(struct)与sizeof(union) 您所在的位置:网站首页 sone成员 sizeof(struct)与sizeof(union)

sizeof(struct)与sizeof(union)

2023-11-02 16:01| 来源: 网络整理| 查看: 265

1字节是8位,一般32位机子上各个数据类型所占的存储空间如下: char:8位 short:16位 int:32位 long:32位 unsigned long:32位 long long:64位 float:32位 double:64位 long double:64位 指针:32位

64位机器上各个数据类型所占的存储空间如下: char:8位 short:16位 int:32位 long:64位 unsigned long:64位 long long:64位 float:32位 double:64位 long double:128位 指针:64位

注:静态成员不占用结构内存 1、sizeof()函数就是计算所占内存字节大小, 2、联合和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合只存放了一个被选中的成员, 而结构体的所有成员都存在。 3、对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。 下面对结构体与联合分四种情况看: 1、struct占用内存大小(sizeof(struct)) 请牢记以下3条原则:(在没有#pragma pack(n)宏的情况下)

一:数据成员对齐规则:结构体(struct)的数据成员,第一个数据成员放在offset为0的地方,之后的每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机子上为4字节,所以要从4的整数倍地址开始存储)。

二:结构体作为成员:如果一个结构体里同时包含结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储(如struct a里有struct b,b里有char,int ,double等元素,那么b应该从8(即double类型的大小)的整数倍开始存储)。

三:结构体的总大小:即sizeof的结果。在按之前的对齐原则计算出来的大小的基础上,必须还得是其内部最大成员的整数倍,不足的要补齐(如struct里最大为double,现在计算得到的已经是11,则总大小为16)。

具体例子:

typedef struct bb { int id; //[0]....[3] 表示4字节 double weight; //[8].....[15]      原则1 float height; //[16]..[19],总长要为8的整数倍,仅对齐之后总长为[0]~[19]为20,补齐[20]...[23]     原则3 }BB; typedef struct aa { int id; //[0]...[3]          原则1 double score; //[8]....[15]     short grade; //[16],[17]         BB b; //[24]......[47]       原则2(因为BB内部最大成员为double,即8的整数倍开始存储) char name[2]; //[48][49] }AA; int main() { cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有