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 不会占用所有空间并破坏目的吗?我真诚地感谢任何回答的人。

4

1 回答 1

1

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

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

根据您的问题,从程序的静态段分配比使用new.

于 2013-08-22T13:07:31.677 回答