合理改变结构体体元素声明顺序,节省内存空间

本文通过两个实例演示了如何通过调整C语言中结构体成员的顺序来优化内存使用,减少内存碎片,从而提高程序效率。
   #include <stdio.h>   
   typedef struct Goods
   {
       char        a[18];//18
       double      b;//8
       char        c;//1
       int         d;//4
       short       e;//2
  }Goods;

  int main()
  {   
      Goods a[10];
      printf("%d\n",sizeof(Goods));      
      return 0;
  }

实际结果如下图:
这里写图片描述


char   c;

的声明放在结构体内第二行声明,其它代码不变

   #include <stdio.h>   
   typedef struct Goods
   {
       char        a[18];//18
       char        c;//1, 
       double      b;//8       
       int         d;//4
       short       e;//2
  }Goods;

  int main()
  {   
      Goods a[10];
      printf("%d\n",sizeof(Goods));      
      return 0;
  }

重新运行

这里写图片描述


只是调整了结构体内变量的声明顺序,就减少了4个字节的内存。

这里写图片描述
上图左右两边分别为两段程序的结构体在内存的存放情况:

因为程序二将char c;
移至了char a[18];后。
故char c;原来存在24现在存储在了14,这样24-27空出的内存就用来存储后面的变量。

由此可知,合理安排结构体内变量的声明顺序可以减少程序所占用的内存。

结构体在占用内存的情况详见。
结构体的补齐与对齐:https://blog.youkuaiyun.com/chuhe163/article/details/80247207

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值