【发布时间】:2010-12-11 22:12:20
【问题描述】:
以下是malloc()的一个非常非常简单的版本,似乎给我分配了一些空间,但除了没有free()而且我不检查是否我已经超出了分配的空间,如何检查代码是否正确?
有什么明显的错误会让“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 那样使用 free 工作,那么它就是一个堆。
-
非常感谢你们所有的cmets!
-
这个分配器是一个叫做“池分配器”的东西的开始——分配像上面那样发生,然后当使用池的工作单元完成时,整个块立即释放回系统。它有助于处理因必须单独管理每个小分配而导致的泄漏。 Apache 使用池 - HTTP 请求进来,为请求设置池,当请求完成时,池被释放。处理请求的其他任何事情都不需要担心释放动态分配的对象。
标签: c memory-management malloc sbrk