Malloc /免费自己实现

The*_*tor 1 c malloc free

我正在尝试编写自己的实现malloc,和free.

在我的研究过程中,我发现了一些免费请求的实现memoryspace:

block = sbrk(totalSize);
Run Code Online (Sandbox Code Playgroud)

然后还有一些其他代码

最后他们return:

return (block + 1);
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么这+ 1是必要的.

另一件事我不明白为什么有些实现magic number在他们的struct.

我已经搜索了网络和stackoverflow但没有找到我的问题的任何答案.

Sto*_*ica 5

所以你从你的分配器返回了内存.一切都很好,用户用它做了一些事情,然后给你free一个指针.就是这样,你得到的只是一个地址.

你怎么能从一个地址知道:

  1. 它是由你开始分配的?
  2. 你还没有释放它?
  3. 它指向的内存块有多大?

您必须在某处存储一些元数据.您描述的示例所示的方法是将元数据存储在您给调用者的原始内存之前malloc.这样,要检索它,您需要做的就是使用您提交的地址进行简单的指针算术free.

之后,要存储的元数据取决于您.幻数是记录您分配以下块的一种方法.如果它的位模式足够"独特",那么你很少会尝试释放你自己没有分配的块.