gpt4 book ai didi

c - C 中的内存优化递归调用

转载 作者:太空狗 更新时间:2023-10-29 17:08:28 25 4
gpt4 key购买 nike

我有一个递归函数,可以这样写:

void func(TypeName *dataStructure, LL_Node **accumulator) {
func(datastructure->left, accumulator);
func(datastructure->right, accumulator);

{
char buffer[1000];
// do some stuff
}

return;
}

我知道实际上缓冲区是在函数的开头分配的,并将语句放在嵌套的范围 block 中 doesn't actually use a new stack frame .但我不希望编译器一次分配指数数量的 1000 字节缓冲区,因为它们可以在每个级别返回时一次分配和丢弃一个。

我应该使用外部全局变量吗?调用辅助函数以强制在递归调用后分配缓冲区?我在这里真正想要的是关于强制执行此行为的最简洁、最符合 C 语言习惯的方法的建议。

编辑:一个附加问题。如果将完全相同的 accumulator 传递给 func 的每次调用,将 accumulator 指针留在全局变量中而不是闻所未闻每次调用都将其插入堆栈?

最佳答案

因为它一次只能被一个调用使用,所以你可以预先分配它并通过一个操作数将它传递给所有调用:

void func(TypeName *dataStructure, LL_Node **accumulator, char *buffer) {
func(datastructure->left, accumulator, buffer);
func(datastructure->right, accumulator, buffer);

{
// do some stuff
}

return;
}

关于c - C 中的内存优化递归调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7562936/

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