结构体内存大小的计算

常见类型在32位系统下和64位系统下的取值范围

 结构体大小的计算方法

⭐⭐⭐字节对齐⭐⭐⭐

首先计算结构体中类型最大的成员,最大值和value值(4字节)进行比较

然后按两者中较小的为单位进行开辟空间。

如:struct test

{

char ch;

short sh;

char t;

}; 此时结构体中成员类型最大的字节为2字节,2和value(4)进行比较,2是小的,在给结构体开辟空间时按2字节对齐,第一个2字节存放char,第二个2字节存放short,第三个2字节存放char,一共6个字节。

所以进行结构体成员变量定义时,尽量按数据类型字节从小到大或从大到小进行排序,尽量不要大的小的类型交叉排序。

⭐⭐⭐一定要遵循节省空间的原则⭐⭐⭐

下列结构体在内存中占用多少字节(32位编译器)?

struct A   
{         
     char t;       
     char k;              
     unsigned short i;             
     unsigned long m;  
}; 

        long类型在32位中占4字节,与value4字节相比,结构体内存每次开辟4个字节的内存空间,所以结构体总共占8字节;

 在32位系统中,有如下结构体,sizeof(fun)数值为多少?

#pragma pack(1)  
struct fun  
{  
    int i;   // 4字节  
    double d;  // 8字节  
    char c;  // 1字节  
};  

sizeof(fun)大小为13;

        第一行的程序#pragma pack(1)把编译器的字节对齐数改成了1,也就是说,编译器以每次开辟一个字节的内存给结构体开辟空间;所以该结构体大小为13字节;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值