2013-10-20 38 views
1

我想請你幫我自己的項目。 我想嘗試用我自己的函數替換原來的malloc,自由函數,它們會有相同的行爲。用戶代替Malloc

int memory_free(void *ptr){} 
void memory_init(void *ptr, unsigned int size){} 
void *memory_alloc(unsigned int size){} 

memory_init函數將創建一個可用的內存。在開始時會有指針,例如* Memory,它將成爲memory_init的參數。內存初始化程序在程序開始時只會被調用一次。

#include <string.h> 

int main() 
{ 
    char region[50]; 
    memory_init(region, 50); 
    char* pointer = (char*) memory_alloc(10); 
    if (pointer) 
    memset(pointer, 0, 10); 
    if (pointer) 
    memory_free(pointer); 
    return 0; 
} 

此代碼是測試我的函數的示例。 Memory_init將初始化內存,memory_alloc將爲每次調用在此內存中創建塊。 如果有人有想法如何使它,我會很高興看到你的答案。 對不起,我的英語。 thx。

爲memory_init我有這個

*Memory; 
void memory_init(void *ptr, unsigned int size){ 
*((unsigned int*)ptr)=size; //at first position there will be size of whole memory; 

} 

我的想法是讓一個內存塊,並在其中會有小的塊。每塊都會有頭。在第一個位置會有塊的大小,在它之後會有標籤,如果它是空閒的,在它之後會有塊結束。

回答

0

malloc()使用sbrk系統調用請求更多內存。 Afaik是唯一的方法。

2

經典Kernighan的8.7節裏奇「C語言編程語言」正是用簡單的術語來描述你所要求的。你可以在網上找到各種地方的副本。您還可以找到更復雜的malloc實現herehere