#include <stdio.h>   typedef struct Goods{char        a[18];//18double      b;//8char        c;//1int         d;//4short       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];//18char        c;//1, double      b;//8       int         d;//4short       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.csdn.net/chuhe163/article/details/80247207

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

  1. c语言中定义结构体指针并指向一片内存空间和直接定义一个结构体变量的区别 Node *p=(Node *)malloc(sizeof(Node)); 和 Node p 两个有什么区别??? Node是一

    (来自百度解答) Node *p是定义一个Node结构体指针,指针名为p,指向一个Node结构体,并为这个结构体分配了内存空间 该结构体无命名 Node p是定义一个Node结构体,结构体名为p. 追 ...

  2. C++中的union(联合体,共用体,数据变量可以共享内存,以节省内存空间)

    union介绍 C++的union本质上也是个类,跟struct性质几乎一致但是有一个最大的区别,数据共享内存. 说到共享内存就要说下union的内存分配:union的大小是按照union里面的成员内 ...

  3. C语言之玩转结构体1——结构体定义与声明

    文章目录 一.前言 二.名词解释 三.结构体声明 四.结构体定义及初始化 五.运行 六.结语 一.前言 结构体作为C语言中的重要一环,可以用它来对数据进行封装,把一些相似的成员放在同一个结构体中,其对 ...

  4. 内存对齐 | 原来字段顺序还能影响结构体占用的内存空间

    大家好啊,不知道看了网管在上周的文章Go指针的使用限制和unsafe.Pointer突破之路,你们有没有感觉Golang 比之前想的还好用呢?确实能直接读写内存,很多以前觉得无能为力的事情就不再是问题 ...

  5. 结构体中元素引用—— “.“ 与 “->“

    自从了解结构体这个类型后,相信有不少人和我一样对于 "." 和 "->"何时使用哪个来引用目标结构体中元素感到混淆,今天还是把他写下来,以后再忘了自己也可 ...

  6. 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )

    文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...

  7. 结构体中元素的偏移地址与首地址

    结构体中元素的偏移地址与首地址 1.offsetof() 0指针的使用 2.container_of() 1.offsetof() #define offsetof(TYPE, MEMBER) ((s ...

  8. 【C 语言】结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )

    文章目录 一.结构体中嵌套二级指针 1.结构体中嵌套二级指针 类型声明 2.为 结构体内的二级指针成员 分配内存 3.释放 结构体内的二级指针成员 内存 二.完整代码示例 一.结构体中嵌套二级指针 1 ...

  9. 【C 语言】结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )

    文章目录 一.结构体中嵌套一级指针 1.声明 结构体类型 2.为 结构体 变量分配内存 ( 分配内存时先 为结构体分配内存 然后再为指针分配内存 ) 3.释放结构体内存 ( 释放内存时先释放 指针成员 ...

最新文章

  1. R语言ggplot2可视化密度图(density plot)、改变密度图下的填充色实战
  2. 2021年春季学期-信号与系统-第十一次作业参考答案-第一小题
  3. R语言与非参数检验之单样本位置检验
  4. 此 sqltransaction 已完成;它再也无法使用_win10笔记本自带office报错无法激活的解决方法...
  5. m40型工业机器人_工业机器人选型的9大参数
  6. 闭包的示例_用示例解释JavaScript中的闭包
  7. class matplotlib.markers.MarkerStyle(marker=None, fillstyle=None)
  8. 你还要我怎样的JS系列(4) -- 作用域链
  9. 聊一聊让我蒙蔽一晚上的各种常量池
  10. R语言的画图代码及差异性分析
  11. DNS协议解析与DNS模拟服务器-基于golang实现
  12. SNS过早收费扼杀用户成长
  13. Mathematica图片裁切
  14. html那种折叠文字内容怎么实现,html+css实现文字折叠特效实例
  15. 卷积神经网络实现手写数字集
  16. 如把联想电脑计算机图标放在桌面上,联想的电脑应用怎么放到桌面图标-?(图)...
  17. 每天学一点flash(73) 恋上我的CD
  18. 从零开始用人工智能预测股票(三、初步实现)
  19. Visual Basic快捷教程——函数与子程序
  20. sync包——互斥锁

热门文章

  1. 微软服务器出问题严重吗,微软承认更新又出问题了 Win10 新补丁修补性能问题失败...
  2. 阿里云服务器安装宝塔面板完整图文教程
  3. 数据报(datagram)网络与虚电路(virtual-circuit)网络是典型两类分组交换网络。
  4. 【Ubuntu】局域网内ping不通
  5. 不要和一种编程语言厮守终生:为工作正确选择 !
  6. surface-distance安装
  7. 关于发表软件著作权的一些提醒
  8. 达龙云电脑上榜2014数据中国最具投资价值排行榜
  9. JavaScript——基础
  10. 小程序地图覆盖手绘地图的解决方法