gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:52 25 4
gpt4 key购买 nike

 #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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com