我遇到了一个面试问题,他们要求用C ++实现malloc()和free函数。
最开始声明一个大小为50000的char数组(50000字节)。假设这是堆内存,请编写malloc和free函数来分配内存块并释放内存。
任何人都可以为我提供C ++工作/伪代码或只是解释机制? (显然代码会让它更容易理解)。
谢谢, 罗希特夏尔
答案 0 :(得分:6)
虽然编写生产级动态内存分配器是一项非常艰巨的任务,但编写一个玩具很简单。这个问题显然是为了测试你的技能,但在其他人的作品中寻找灵感仍然是公平的。
Kernighan的“C编程语言”& malloc
的里奇contains a simple implementation。研究它并考虑其设计和实施的含义。考虑如何改进它以更好地执行,减少碎片或处理多个线程。在那之后,编写自己的玩具分配器应该不再困难,并回答任何出现的问题。
答案 1 :(得分:2)
可以使用几种不同的算法。对于这样的 小内存,我只是在每个块前面加上指向下一个的指针 阻止,以及指示是分配还是释放的标志。一个 分配包括找到一个足够大的空闲块,将其拆分 如有必要,将返回的块标记为已分配。免费 包括将块标记为空闲。在某些时候,你也必须这样做 合并块:如果两个空闲块相互跟随,则合并它们 合而为一。 (我在实施过程中分配过程中这样做了。)
上述算法本身并不是很困难。真正的诀窍是 获得所有不同的演员阵容,这是正确的。这是一个很好的锻炼 在非常低级别的编程。
答案 2 :(得分:-4)
我之前没有测试过,但我认为可以通过使用新的关键字和模板来支持通用状态来创建所需类型的数组, 但我会按照这个问题来找出C ++英雄的反应。