首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试着教高中生动态记忆分配--这样做最好的方法是什么?

试着教高中生动态记忆分配--这样做最好的方法是什么?
EN

Software Engineering用户
提问于 2017-05-02 02:55:05
回答 2查看 298关注 0票数 2

由于反馈

而从堆栈溢出复制的

所以我想教别人如何使用块填充模型进行动态内存分配。这意味着,每个内存块都有前缀,每个内存块都是以4个字节作为后缀,以字节为单位,同时还有一个位(保持在最左边的位中,因为不应该使用)来表示块是空闲的还是分配的。

动态内存分配中的所有内容都涉及对块填充的操作,而我通常认为这些块是双链接列表中的节点。这在技术上是不完全一样的,但是在心态和使用的操作上做一个相当不错的比较就足够了。

我将与一个拥有C++和Java基本编程知识的高中生一起做一个项目(不管怎么说,他都是这么说的)。基本上,他的老师知道他下一年的老师,他们让他在夏天和学生选择的任何人一起做一些编程(我获得了被选中的荣誉)。

无论如何,我决定用一种非常笨重的编程语言(游戏制造者,这是因为我们可以用一个坏掉的对象/指针接口来完成游戏开发)的解决方案是,通过使用数组来实现结构,就好像它是堆空间。因此,我们正在实现DMA算法来处理数组索引。这对我来说并不难,我可能在我的文件中有一些不太合适的代码,可以满足我们的兴趣。

然而,我想给另一个人一个机会去做,因为它是程序的关键子系统之一。这就引出了最后一个问题:

如何解释动态内存分配的概念,以及如何在不依赖指针和链接列表作为概念进行比较的情况下对函数进行编码?

我想也许用答案和步骤来做一些问题集来演示分配器在数组上的动作,但我认为这可能会造成太大的损失,因为我们应该马上开始工作,而不是浪费太多的时间。他们有什么好的方式来描述块垫和东西,即使是一个外行也可能理解?

如果这对背景有帮助的话,我是计算机科学专业的三年级本科生。因此,我没有真正的教学经验。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2017-05-04 20:50:54

根据我收到的反馈,并思考了一段时间,我意识到我问题中的一些要点,我认为这是一个解决这个问题的办法。

  1. 与我一起工作的人对低级代码知之甚少,虽然可能能够理解动态内存分配的概念,但可能需要相当长的时间才能真正从零开始编写代码。
  2. 我们需要编写代码的唯一原因是,我们选择的语言应该具有该特性,而且它不能正常工作。特别是,指针可以在释放任何内存之后指向不同的东西。
  3. 代码本身仅用于分配内存和构建链接结构。我们在执行方面没有什么特别的需要。
  4. 我已经知道如何编写这段代码了,而且我可能已经编写了一些版本的代码,只需要稍微清理一下。
  5. 这个项目的目的是让学生使用物理和编程来制作一个电子游戏。从长远来看,浪费大部分时间来构建一个分配模块可能是不明智的。

所以,我认为,在我的特殊情况下,最好的行动是让我自己解决这个问题,并把它处理好,而不是坚持让本质上是我队友的人知道这个计划的每一寸。毕竟,如果语言在设计上没有错误,我们就不会浪费时间。那么,为什么还要浪费更多的时间来教别人自己编写代码,然后期望他们自己做一个有用的版本呢?

假设我要教他们,我认为最好的操作方法(因为我们只进行数字交流)是以某种形式创建一些问题,展示原始内存以及当使用不同的函数和输入时它是如何变化的。

票数 1
EN

Software Engineering用户

发布于 2017-05-02 04:09:32

要解释这个话题,你需要找到一个类似的真实生活的东西,并且会被学生理解。

例如,您可以使用书架和书籍的概念。你可以一个一个地把书放进书架上,然后把它填满,但是当你把书拿出来时,它会留下可以填满其他书的漏洞。有时你有比别人大的书,而且它们不适合那些洞。所以你必须把书放在最后(或者换一个书架),而不是用已经存在的洞。你也可以“压缩”这些书,但这将使任何直接指向这些书的指示失效(即,第三书架左边的第15本书)。(是的,我知道托管语言会处理这个问题,但尽量不要过于技术性)

关于分配的大小的一点实际上只是一个占位符,用来观察书的大小。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/348173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档