什么是c内存管理的好比喻?

时间:2010-05-24 22:34:59

标签: c memory-management

我正试图找到一个很好的比喻来解释内存分配,初始化和释放到非技术受众。我已经听说过传递参考/价值与邮政服务的使用情况有关,但与分配/解除分配的关系不大。
因此,我想过使用租用空间的想法可能有用,但我想知道SO工作人员能否提供更好的东西。

8 个答案:

答案 0 :(得分:14)

您可能会使用许多隐喻。物业租赁等问题是承租人通常会选择空间。在这种情况下,操作系统负责选择足够大小的连续物理空间。它更像是一家酒店。您可以申请所需的大小房间,酒店工作人员会为您指定一个未被占用且至少与您要求的房间一样大的房间(malloc)。他们为您提供两件事:地址(您的房间号码)和访问该房间的权限(密钥)。然后由您决定何时退房并返还密钥(free在房间的上方)。之后,酒店可以将房间分配给其他人。

答案 1 :(得分:3)

作为租赁类比的变体,那么停车场类比呢?

停车场有编号空间 - 这些是你的基本记忆单位(C chars - 听起来几乎像cars ...;)。如果你想停车,那么你得到的空间并不重要 - 它们都非常平等。

你甚至可以通过这种方式解释内存碎片 - 如果你想停放你的B-double半挂车,它不仅仅有6个空间 - 你需要6个相邻的停车位。

答案 2 :(得分:2)

容器怎么样?你从厨房拿到一个碗(malloc),然后把东西放进去。当你完成后,你要么把它扔进垃圾桶(丢失指针),要么把它带回厨房,以便可以重复使用(free)。如果不把它们带回来,厨房最终会用完碗。

答案 3 :(得分:1)

这是一个比喻:

一家餐厅(称为C先生的厨房),必须容纳客人。他们分发了客户(内存位)可以用来查找表(内存块)的数字(指针)。

答案 4 :(得分:1)

我喜欢太空租赁的想法。之前没有听过那个。客户可以租用小型或大型空间。租用空间的键就像指针一样。

释放内存与客户返回密钥并放弃空间是一致的,因此可以回收空间。

空间可以租用一小时或永久。如果客户端永远租用空间但丢失密钥并且不使用空间,那么这就是内存泄漏,因为空间没有被使用,也没有被回收到社区。

重要的一点是,如果客户返回他的密钥,但保留副本,他会缝制问题的种子。该空间将被回收给新的官方所有者,但旧的所有者可以在获得未经授权的密钥访问后非正式地返回并废弃该空间。

答案 5 :(得分:1)

如果你选择tehmick的酒店房间比喻,那么你可以将意外进入(甚至睡觉)别人房间的分段违规比作。垃圾收集的特点是清洁女佣:)

答案 6 :(得分:1)

在教授技术资料时请不要使用隐喻。

我认为唯一有用的比喻是变量是一个可以存储值的框。所有其他人一般都没用,而且总的来说很混乱。

介绍动态内存管理的技术概念。这并不困难,如果他们真的需要一个比喻来理解他们所发生的事情肯定是其他问题。

当涉及指针(或引用)时,他们需要理解内存管理,这是大多数人离开课程的地方,因为他们没有得到它。

编辑:我忘记了,当你使用租借比喻时,学生在垃圾收集或参考计数技术方面会丢失。很明显,这会让人们后来感到困惑。

答案 7 :(得分:0)

我会使用土地租赁程序。在任何土地管理系统中都有指定的机构(私人或公共)来监督土地管理和管理问题。任何有兴趣获得土地空间的机构,要求获得一块土地(通过malloc)。然后管理主体检查空闲空间并分配空间(授予土地)并发送该地块的地图或地址(租约几乎无限期)。客户在这片土地上出售他/她的兴趣后(即没有兴趣保留它),然后将其返还给代理/管理机构(使用free)。