在c中使用数组进行LIFO内存分配的目的是什么?

时间:2013-08-22 12:58:08

标签: c arrays alloc

 #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占用所有这些空间并打败目的吗?我真诚地感谢任何回答的人。

1 个答案:

答案 0 :(得分:1)

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

这是LIFO,因为只有afree()释放了最后分配的存储空间,但这需要客户端代码的合作,指定与最新分配的存储空间相对应的p

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