Инициализация авто и глобальных переменных в C - PullRequest
3 голосов
/ 13 июня 2011

Если я правильно понимаю, что глобальные переменные (которые входят в сегмент данных) в C инициализируются там, где автоматические переменные (которые идут в стек) не инициализируются. или, может быть, наоборот?

Почему это так? В чем заслуга компилятора, который не инициализирует оба вида переменных? Увеличивает ли это скорость и т.д.?

Ответы [ 2 ]

4 голосов
/ 13 июня 2011

Как вы говорите, глобальные переменные помещаются в сегмент данных, поэтому их значение содержится в конечном исполняемом файле, и оно также может быть инициализированным значением, поскольку в любом случае разницы в производительности нет.

С другой стороны, локальные переменные размещаются в стеке, который устанавливается во время выполнения, поэтому их инициализация может привести к снижению производительности.

1 голос
/ 13 июня 2011

Вы правильно поняли, глобальные инициализированы, авто нет. Это связано с тем, что глобальные переменные загружаются непосредственно из двоичного образа программы, и инициализация «свободна», тогда как auto находится в стеке, и необходимо запустить код для изменения значений и их инициализации (т. Е. Снижение производительности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...