У меня есть рекурсивная функция, которую можно записать так:
void func(TypeName *dataStructure, LL_Node **accumulator) {
func(datastructure->left, accumulator);
func(datastructure->right, accumulator);
{
char buffer[1000];
// do some stuff
}
return;
}
Я знаю, что на самом деле буфер выделяется в начале функции и помещает оператор во вложенный блок области видимости на самом деле не использует новый кадр стека . Но я не хочу, чтобы компилятор выделял экспоненциальное количество 1000-байтовых буферов одновременно, когда их можно выделить и выбросить по одному время, когда каждый уровень возвращается.
Следует ли использовать внешние глобальные переменные? Вызов вспомогательной функции для принудительного выделения буфера после рекурсивного вызова? На самом деле я ловлю здесь совет о наиболее чистом, наиболее C-идиоматическом способе заставить такое поведение.
Edit: Один дополнительный вопрос. Если один и тот же аккумулятор
будет передаваться при каждом вызове func
, то неслыханно оставить указатель аккумулятора
в глобальной переменной вместо того, чтобы помещать его в стек при каждом вызове?