C++中 malloc 的自定义实现
Custom implementation of malloc in C++
我遇到了一个面试问题,他们要求在C++中实现malloc()和自由函数。
在一开始就声明了一个大小为 50000(50000 字节)的 char 数组。假设这是堆内存,编写 malloc 和 free 函数来分配内存块并释放内存。
任何人都可以为我提供C++工作/伪代码或只是解释机制?(显然代码会让它更容易理解)。
谢谢罗希特
虽然编写生产级动态内存分配器是一项非常艰巨的任务,但编写玩具分配器非常简单。这个问题显然是为了测试你的技能,但在别人的作品中寻找灵感仍然是公平的。
Kernighan & Ritchie的"The C Programming Language"包含malloc
的简单实现。研究它并考虑其设计和实施的含义。考虑如何改进它以更好地执行、减少碎片或处理多个线程。在那之后,编写自己的玩具分配器并回答出现的任何问题应该不再困难。
可以使用几种不同的算法。 对于这样的内存很小,我只是在每个块前面加上指向下一个块的指针块,以及指示它是已分配还是释放的标志。 一分配包括找到一个足够大的可用块,将其拆分如有必要,并将返回的块标记为已分配。 一个免费的包括将块标记为空闲。 在某些时候,您还必须合并块:如果两个自由块相互跟随,则它们被合并合二为一。 (我在实现中的分配期间执行此操作。
上述算法本身并不难。 真正的诀窍是获得所有不同的演员阵容等等。 这是一个很好的练习在非常低级的编程中。
我以前没有测试过它,但我认为可以通过使用新的关键字和模板来支持创建所需类型数组的通用状态来做到这一点,但我会按照这个问题来找出C++英雄的反应.
相关文章:
- 如何正确实现和访问运算符的各种自定义枚举器
- 如何实现自定义匹配器以检查 Catch2 中的对象相等性
- 双链表的自定义实现不起作用(教育)
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 为自定义打印调试实现传递任何类型的变量
- 基于自定义void_t实现的成员检测
- c++ 中的自定义分配器,用于不调用secure_string实现
- C# HashSet VS C++ std::unordered_set 使用自定义类键。C++慢...不可能。如何实现 C# 的速度?
- 为自定义类C++实现哈希
- 自定义哈希表实现-将字符串映射到整数时出现内存错误
- 如何自定义wxApp来实现协议
- 如何实现接受参数的自定义流操纵器?
- 如何测试AVL树的自定义实现
- DirectX 12自定义实现与DirectX 11相同
- 可以将STD :: StreamBuf的自定义实现中的异常交付给流用户
- 从链表访问对象(自定义实现)
- C++中 malloc 的自定义实现
- 自定义实现具有位表示的bool向量-如何实现运算符[]
- 在OpenCV中自定义实现
- c_str() 自定义实现/在每个字符串末尾"="