我有一个递归函数,可以写成:
void func(TypeName *dataStructure, LL_Node **accumulator) {
func(datastructure->left, accumulator);
func(datastructure->right, accumulator);
{
char buffer[1000];
// do some stuff
}
return;
}
Run Code Online (Sandbox Code Playgroud)
我知道实际上缓冲区是在函数的开头分配的,并且将语句放在嵌套的范围块中实际上并不使用新的堆栈帧.但是我不希望编译器一次分配一个指数数量的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;
}
Run Code Online (Sandbox Code Playgroud)