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

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

最佳答案

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

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

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

关于c - 在 c 中使用数组分配 LIFO 内存的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381165/

相关文章:

c - 什么是 getservbyname()——我理解对了吗?

javascript - 根据条件查找所有索引

c - c中的模板样式矩阵实现

iphone - 需要帮助理解 iOS/Objective-C 编程中的特定分配/发布习惯用法

c++ - 分配类型为自己类 C++ 的 vector 的内存

c - 防止用户按退格键

将 XORShift 算法从 C 代码转换为 Delphi 代码

c - 当用户输入 "-1"时让数组停止

JavaScript 数组警报

scala - Scala Array构造函数?