鱼C论坛

 找回密码
 立即注册
查看: 1636|回复: 3

[已解决]为什么要手动分配内存,不解。。。

[复制链接]
发表于 2019-12-19 15:10:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么明明可以由系统自动申请分配内存,并自动释放,却还要存在由程序员手动分配,最后还要手动释放?这种手动分配内存有什么特殊存在的意义码?
最佳答案
2019-12-19 15:54:58
自动分配内存分配与栈上,使用方便,安全性高,速度稍快,但灵活度低
手动分配内存分配于堆上,灵活度非常高。

举个例子,比如一款游戏。那么一局游戏中势必会出现很多实体(单位,物品,投射物。。),
但是在游戏开始前,你并不会知道这局游戏会出现多少个单位。

这时你有两个选择:
1、自动分配内存:
建立数组,在数组中储存每个实体的信息。
但这样数组长度总是有限的,那么一局游戏里能同时出现的实体数目就是有限的了。

另外,这个“实体数组”,在没有那么多实体时仍然会占据同样的空间,也会浪费内存。
2、手动分配内存:
1)建立链表
2)手动分配数组,当空间不够时再分配更大的。
这两种方法能根据实体数量动态调整分配的内存大小,从而做到空间的充分利用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-19 15:54:58 | 显示全部楼层    本楼为最佳答案   
自动分配内存分配与栈上,使用方便,安全性高,速度稍快,但灵活度低
手动分配内存分配于堆上,灵活度非常高。

举个例子,比如一款游戏。那么一局游戏中势必会出现很多实体(单位,物品,投射物。。),
但是在游戏开始前,你并不会知道这局游戏会出现多少个单位。

这时你有两个选择:
1、自动分配内存:
建立数组,在数组中储存每个实体的信息。
但这样数组长度总是有限的,那么一局游戏里能同时出现的实体数目就是有限的了。

另外,这个“实体数组”,在没有那么多实体时仍然会占据同样的空间,也会浪费内存。
2、手动分配内存:
1)建立链表
2)手动分配数组,当空间不够时再分配更大的。
这两种方法能根据实体数量动态调整分配的内存大小,从而做到空间的充分利用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-12-19 19:14:23 | 显示全部楼层
其实就是楼上的说法:

举个最简单的例子:允许用户输入数字,并且将用户输入的数字记录下来

你准备怎么做:你根本不知道用户会输入多少数字,这时候就需要动态申请内存了,用户每输入一个数字,就申请一块内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-25 15:32:55 | 显示全部楼层
我叫MD 发表于 2019-12-19 19:14
其实就是楼上的说法:

举个最简单的例子:允许用户输入数字,并且将用户输入的数字记录下来

谢谢解答~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 05:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表