2013-08-22 1 views
2
#define ALLOCSIZE 10000 /* size of available space */ 

static char allocbuf[ALLOCSIZE]; /* storage for alloc */ 
static char *allocp = allocbuf; /* next free position */ 

char *alloc(int n) /* return pointer to n characters */ 
{ 
    if (allocbuf + ALLOCSIZE - allocp >= n) { /* it fits */ 
     allocp += n; 
     return allocp - n; /* old p */ 
    } else /* not enough room */ 
      return 0; 
} 

void afree(char *p) /* free storage pointed to by p */ 
{ 
    if (p >= allocbuf && p < allocbuf + ALLOCSIZE) 
     allocp = p; 
} 

До сих пор я понял, что целью распределения памяти является сохранение эффективности программы. Не объявлял бы массив allocbuf занимать все это пространство и побеждать цель? Я искренне благодарю всех, кто отвечает.Какова цель распределения памяти LIFO с массивом в c?

+0

Ваш код не имеет распределения памяти LIFO, он просто выделяет все это с самого начала. – bluehallu

+0

Единственная «цель» здесь - сохранить код простым. Это очень опасный код. –

ответ

1

Эти функции служат в качестве распределителей массивов, но вместо использования новой памяти они используют и повторно используют этот большой allocbuf, который находится в статическом сегменте и не нуждается в обычном распределении.

Это LIFO, потому что только последнее выделенное хранилище освобождается afree(), но для этого требуется сотрудничество с кодом клиента при указании p, соответствующего последнему выделенному хранилищу.

Что касается вашего вопроса, то, скорее, его можно выделить из статического сегмента программы, чем с помощью new.