一文搞懂结构体变量占用多大内存空间(详细)

一、首先做一道例题感受一下

请问下面定义的结构体变量aa在计算机内存中占用多少字节?

#include
main()
{
struct  student
{   float    height;
    short int  age ;
    char     sex ;
}aa;
printf("%d\n",sizeof(aa));  //屏幕上将显示多少?
}

错误解答:我们都知道,char类型占用1个字节,float型占用4个字节,short int类型占用2个字节,int型在VC6.0中占用4个字节(TC2.0中占用2个字节),long占用8个字节,double占用8个字节。因此,我们可能会犯一个错误就是直接4+2+1=7,结构体aa占用7个字节。这是错的。

错误分析:计算结构体大小时需要考虑其内存布局,编译系统为了提高计算机访问数据的效率,在安排结构体每个成员的时候采用了内存对齐的方法,具体是:结构体在内存中的存放按单元进行存放,每个单元的大小取决于结构体中最大基本类型的大小。

二、为解释清楚,我们列出以下几种格式

格式一:
struct tagPhone{    
 char   A;    
 int    B;    
 short  C;    
}Phone1;  

格式二:  
struct tagPhone{    
 char   A;    
 short  C;   
 int    B;    
}Phone2;   

格式三:  
struct tagPhone3{    
 char    A;    
 char   B[2];    
 char    C[4];    
}Phone3;   

格式四:
struct tagPhone3{    
 char    A;    
 double  B[2];    
 char    C[4];    
}Phone4;   

然后我们一一分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
综上所述,作为一个优秀的程序员,有必要在声明结构体变量时考虑如何才能节省空间,因为这之间的差异是非常大的。

原文链接:http://blog.sina.com.cn/s/blog_75a2ecd20102xca0.html

  • 26
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值