首先,我们将使用 sbrk(2) 来实现一个很笨拙的malloc,这个 malloc 虽然是最简单的和相当快的,但是是相当糟糕的。
1、原理
想法很简单,每次malloc被调用的时候,我们通过请求的空间来移动break,返回break的前一个地址,这个实现很简单和高效,只需要三行代码,但是我们没能实现free和relloc
这个版本的malloc浪费很多废弃的内存块空间,在这里仅仅是起到教学和使用sbrk(2)系统调用的目的 ,为了教学目的,我们将增加一些错误管理到我们的malloc实现。
本文地址:http://wuyudong.com/2016/07/27/2346.html,转载请注明源地址。
2、实现
/* 一个糟糕的malloc仿制品 */ #include <sys/types.h> #include <unistd.h> void *malloc(size_t size) { void *p; p = sbrk(0); /* 如果sbrk操作失败,返回NULL */ if (sbrk(size) == (void *)-1) return NULL; return p; }
Comments