#include
typedef struct Goods
{
chara[18];
//18
doubleb;
//8
charc;
//1
intd;
//4
shorte;
//2
}Goods;
int main()
{
Goods a[10];
printf("%d\n",sizeof(Goods));
return 0;
}
实际结果如下图:
文章图片
将
charc;
的声明放在结构体内第二行声明,其它代码不变
#include
typedef struct Goods
{
chara[18];
//18
charc;
//1,
doubleb;
//8
intd;
//4
shorte;
//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
推荐阅读
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 【C】题目|【C语言】题集 of ⑥
- 单片机|自学单片机好找工作吗(会单片机能找什么工作?)
- 单片机|keil把源代码生成lib的方法
- c语言|一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- 笔记|C语言数据结构——二叉树的顺序存储和二叉树的遍历
- 个人理解|【C语言基础之类型转换】
- c语言|【C语言】自定义类型 结构体 枚举 联合
- 学习分享|【C语言函数基础】