AFAIK, есть 2 типа глобальных переменных, инициализированные и неинсталлированные . Как они хранятся? Они оба хранятся в исполняемом файле? Я могу думать об инициализированных глобальных переменных, чьи начальные значения хранятся в исполняемом файле. Но что нужно хранить для неинициализированных?
Мое нынешнее понимание таково:
Исполняемый файл состоит из нескольких разделов, таких как .text, .data и .bss. Код хранится в секции .text, инициализированные глобальные или статические данные хранятся в секции .data, а неинициализированные глобальные или статические данные хранятся в секции .bss.
Спасибо за ваше время, чтобы просмотреть мои вопросы.
Обновление 1 - 9:56 11.03.2010
Я нашел хорошую ссылку здесь:
Сегменты в языке ассемблера -
Построение сегментов текста и данных с помощью директив .text, .data и .bss
Обновление 2 - 10:09 11.03.2010
@ Michael
Я определяю 100 байтов неинициализированной области данных в моем коде сборки, эти 100 байтов не сохраняются в моем исполняемом файле, поскольку НЕ инициализируются.
Кто выделит 100-байтовое пространство неинициализированной памяти в ОЗУ? Программный загрузчик ?
Предположим, я получил следующий код:
int global[100];
void main(void)
{
//...
}
Глобальный [100] не инициализирован. Как глобальная [100] будет перекодирована в моем исполняемом файле? И кто будет выделять это в какое время? Что делать, если он инициализирован?