以下是一个非常非常简单的版本malloc()似乎给我分配了一些空间,但除了没有free()的事实,我不检查我是否已超出分配的空间,我如何检查代码是否正确?内存分配在C
“C”专家会给我带来什么明显的失误?
#include <stdio.h>
#include <unistd.h>
#define MAX_MEMORY 1024 * 1024 * 2 /* 2MB of memory */
void *stack = NULL; /* pointer to available stack */
void * memoryAlloc(size) {
if (stack == NULL)
stack = sbrk(MAX_MEMORY); /* give us system memory */
void *pointer;
pointer = (void *)stack + size; /* we always have space :) */
stack += size; /* move in stack forward as space allocated */
return pointer;
}
我不会称之为内存“堆栈”的舞台。你当前的实现就像一个堆栈,是的,但是如果你打算像malloc一样工作,免费,那么它就是一堆。 – 2009-10-31 18:26:25
非常感谢您的评论! – Radek 2009-10-31 18:29:00
这个分配器是所谓的“池分配器”的开始 - 分配发生像上面那样,然后当使用池的工作单元完成时,整个块被立即释放回系统。它有助于处理由于必须单独管理每个小配置而导致的泄漏。 Apache使用池 - 一个HTTP请求进入,为请求设置一个池,当请求完成时池被释放。对请求没有任何其他工作需要担心释放动态分配的对象。 – 2009-10-31 19:08:09