Это зависит от того, есть ли определения в заголовочном файле или просто объявлений.
Это также полностью зависит от реализации, поскольку стандарт ISO C ничего не говорит о том, как все делается на этом уровне. Это только охватывает, как вещи, кажется, ведут себя на уровне "C виртуальной машины". Но я расскажу о наиболее вероятном сценарии здесь.
Определения, такие как int xyzzy;
(или, что еще хуже, char big_honkin_thing[9999999];
), могут занимать место в объектном файле и, если у вас нет особо умного компоновщика, также исполняемый файл. Я говорю «может», так как это зависит от реализации.
Инициализация значения с большей вероятностью обеспечит его сохранение в объекте, а не создание во время выполнения. Но вы, вероятно, найдете эффект независимо от этого: большие объектные / исполняемые файлы, если они созданы во время компиляции, или (мягко) более медленное время запуска, так как больше памяти нужно инициализировать нулями.
Например, добавление char big[99999] = {'x'};
в заголовочный файл приводит к увеличению размера исполняемого файла от 18 КБ до 118 КБ.
Такие простые объявления, как typedef
и extern
, не будут выделять пространство в объекте сами по себе.
Кроме того, даже без определений время компиляции будет увеличено, так как компилятор должен обработать этот заголовочный файл. Но это никак не повлияет на саму среду выполнения (ни скорость, ни память).