Рекурсивные вызовы, оптимизирующие память в C

У меня есть рекурсивная функция, которую можно записать так:

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 , то неслыханно оставить указатель аккумулятора в глобальной переменной вместо того, чтобы помещать его в стек при каждом вызове?

7
задан Community 23 May 2017 в 11:58
поделиться