在c语言中,用数组分配后进先出内存的目的是什么? #定义ALLOCSIZE 10000/*可用空间大小*/ 静态字符allocbuf[ALLOCSIZE];/*alloc存储*/ 静态字符*allocp=allocbuf;/*下一个自由位置*/ char*alloc(int n)/*返回指向n个字符的指针*/ { 如果(allocbuf+ALLOCSIZE-allocp>=n){/*它适合*/ allocp+=n; 返回allocp-n;/*旧p*/ }else/*没有足够的空间*/ 返回0; } void afree(char*p)/*p指向的可用存储空间*/ { 如果(p>=allocbuf&&p

在c语言中,用数组分配后进先出内存的目的是什么? #定义ALLOCSIZE 10000/*可用空间大小*/ 静态字符allocbuf[ALLOCSIZE];/*alloc存储*/ 静态字符*allocp=allocbuf;/*下一个自由位置*/ char*alloc(int n)/*返回指向n个字符的指针*/ { 如果(allocbuf+ALLOCSIZE-allocp>=n){/*它适合*/ allocp+=n; 返回allocp-n;/*旧p*/ }else/*没有足够的空间*/ 返回0; } void afree(char*p)/*p指向的可用存储空间*/ { 如果(p>=allocbuf&&p,c,arrays,alloc,C,Arrays,Alloc,到目前为止,我所理解的是内存分配的目的是保持程序的效率。声明数组allocbuf是否会占用所有空间并破坏其用途?我真诚地感谢所有回答的人。这些函数充当数组分配器,但它们不使用新内存,而是使用并重用这个大型allocbuf,它位于静态段,不需要通常的分配 这是后进先出,因为afree()只释放最后分配的存储,但这需要客户机代码配合指定与最新分配的存储相对应的p 至于你的问题,从程序的静态段分配比使用new更快。你的代码没有任何后进先出内存分配,它只是从一开始就分配所有内存。这里唯一的“目的”是保持

到目前为止,我所理解的是内存分配的目的是保持程序的效率。声明数组allocbuf是否会占用所有空间并破坏其用途?我真诚地感谢所有回答的人。

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

这是后进先出,因为
afree()
只释放最后分配的存储,但这需要客户机代码配合指定与最新分配的存储相对应的
p


至于你的问题,从程序的静态段分配比使用
new

更快。你的代码没有任何后进先出内存分配,它只是从一开始就分配所有内存。这里唯一的“目的”是保持代码简单。这是非常危险的代码。
 #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;
 }