以下是一個非常非常簡單的版本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