Массив расположен в стеке, что означает, что, предположительно, исполняемый файл может содержать эти данные в сегменте данных исполняемого файла (в Windows) как кусок данных, который уже заполнен нулями.
Что если вы вернетесь в функцию, которая определяет массив?Глобальный сегмент DATA должен иметь копию этого массива для каждого вызова функции, чтобы каждая функция имела собственный массив для работы.Компилятор должен запустить ваш код, чтобы решить, будет ли максимальное количество рекурсий.
Кроме того, что происходит, когда в вашей программе несколько потоков, и каждый вызывает foo?Внезапно вы поделились данными в DATA, которые должны быть заблокированы.Блокировка может вызвать больше проблем с производительностью, чем избавиться от инициализации.
Я бы не слишком беспокоился об этом.Большинство платформ имеют достаточно эффективные способы заполнения памяти нулем.Если вы не профилируете это и не обнаружите проблему, не переживайте.