【问题标题】:Custom implementation of malloc in C++ [closed]C++ 中 malloc 的自定义实现 [关闭]
【发布时间】:2012-09-18 11:34:03
【问题描述】:

我遇到了一个面试问题,他们要求在 C++ 中实现 malloc() 和 free 函数。

一开始就声明了一个大小为 50000 的 char 数组(50000 字节)。假设这是堆内存,编写malloc和free函数来分配内存块并释放内存。

任何人都可以为我提供 C++ 工作/伪代码或只是解释机制? (显然代码会让它更容易理解)。

谢谢, 罗希特

【问题讨论】:

  • 我认为这过于宽泛,分配器太大而无法容纳答案,并且基础是readily available on Wikipedia,因此在此处添加它们的价值很低。
  • 我认为面试问题背后的想法是让考虑如何管理自己的记忆,以及如何跟踪使用的和未使用的.努力吧!
  • 请更具体地说明您卡在哪里。
  • c++ 还是 c?我会认为“在 C 中自定义 malloc 的实现”

标签: c++ c memory malloc free


【解决方案1】:

虽然编写生产级动态内存分配器是一项非常艰巨的任务,但编写一个玩具分配器却很简单。这个问题显然是为了测试你的技能,但从其他人的作品中寻找灵感仍然是公平的。

Kernighan & Ritchie contains a simple implementation of malloc 的“C 编程语言”。研究它并考虑其设计和实施的影响。考虑如何改进它以更好地执行、减少碎片或处理多个线程。之后,编写自己的玩具分配器并回答出现的任何问题应该不再困难。

【讨论】:

    【解决方案2】:

    有几种不同的算法可供使用。对于这样一个 小内存,我只是在每个块前面加上一个指向下一个块的指针 块,以及一个标志,指示它是分配还是释放。一个 分配包括找到一个足够大的空闲块,将其拆分 如有必要,并将返回的块标记为已分配。免费 包括将块标记为空闲。在某些时候,您还必须 合并块:如果两个空闲块相互跟随,则它们被合并 合而为一。 (我在实现的分配过程中这样做了。)

    上述算法本身并不难。真正的诀窍是 获得所有不同的演员阵容等等。这是一个很好的锻炼 在非常低级的编程中。

    【讨论】:

      【解决方案3】:

      我之前没有测试过它,但我认为可以通过使用 new 关键字和模板来支持通用状态来创建所需类型的数组, 但我会按照这个问题来了解 C++ 英雄的回应。

      【讨论】:

      • 我认为使用new 不是解决这个问题的方法。
      • 使用new创建malloc?
      猜你喜欢
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      相关资源
      最近更新 更多