2013-08-22 13 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占用了所有这些空间并破坏了目的?我真诚地感谢任何回答的人。用c中的数组进行LIFO内存分配的目的是什么?

+0

你的代码没有任何LIFO内存分配,它只是从头开始分配它。 – bluehallu

+0

这里唯一的“目的”是保持代码简单。这是非常危险的代码。 –

回答

1

这些函数用作数组分配器,但不是使用新的内存,而是使用和重用这个大的allocbuf,它位于静态段中,不需要通常的分配。

这是LIFO,因为只有最后一个分配的存储空间被afree()释放,但这需要客户端代码在指定p时对应最新分配的存储进行协作。

从你的问题来看,从程序的静态段分配的速度比使用new要快。