Cтраница 1
![]() |
Виртуальное адресное пространство процесса А ( а. физическая память ( б. виртуальное адресное пространство процесса В ( в. [1] |
Неинициализированные данные необходимы лишь с точки зрения оптимизации. Это можно реализовать следующим образом: создать целый сегмент исполняемого двоичного файла, точно равного по размеру числу байтов данных, и проинициализировать весь этот сегмент нулями. [2]
![]() |
Присваивание одного объекта другому при помощи поэлементного копирования. [3] |
Отрицательными сторонами создания новых типов данных с помощью ключевого слова struct языка С являются возможность получения неинициализированных данных; возможность некорректной инициализации; все программы, использующие объекты типа struct в стиле языка С, должны быть изменены при изменении реализации этого типа struct; также не предусматривается защитных мер, позволяющих гарантировать, что данные хранятся в целостном состоянии и содержат правильные значения. [4]
Здесь текст программы занимает 8 Кбайт, и инициализированные данные также занимают 8 Кбайт. Размер сегмента неинициализированных данных ( BSS) равен 4 Кбайт. Исполняемый файл содержит только 16 Кбайт ( текст инициализированные данные), плюс короткий заголовок, в котором операционной системе указывается выделить программе дополнительно 4 Кбайт после неинициализированных данных и обнулить их перед выполнением программы. Этот трюк позволяет сэкономить 4 Кбайт нулей на диске в исполняемом файле. [5]
Сегмент данных содержит переменные, строки, массивы и другие данные программы. Он состоит из двух частей: инициализированных данных и неинициализированных данных. Инициализированная часть сегмента данных содержит переменные и константы компилятора, значения которых должны быть заданы при запуске программы. [6]
Однако из экономии места на диске этого не делается. Файл содержит только те переменные, начальные значения которых явно заданы. Вместо неинициализированных переменных компилятор помещает в исполняемый файл просто одно слово, содержащее размер области неинициализированных данных в байтах. При запуске программы операционная система считывает это слово, выделяет нужное число байтов и обнуляет их. [7]
Здесь текст программы занимает 8 Кбайт, и инициализированные данные также занимают 8 Кбайт. Размер сегмента неинициализированных данных ( BSS) равен 4 Кбайт. Исполняемый файл содержит только 16 Кбайт ( текст инициализированные данные), плюс короткий заголовок, в котором операционной системе указывается выделить программе дополнительно 4 Кбайт после неинициализированных данных и обнулить их перед выполнением программы. Этот трюк позволяет сэкономить 4 Кбайт нулей на диске в исполняемом файле. [8]
Здесь текст программы занимает 8 Кбайт, и инициализированные данные также занимают 8 Кбайт. Размер сегмента неинициализированных данных ( BSS) равен 4 Кбайт. Исполняемый файл содержит только 16 Кбайт ( текст инициализированные данные), плюс короткий заголовок, в котором операционной системе указывается выделить программе дополнительно 4 Кбайт после неинициализированных данных и обнулить их перед выполнением программы. Этот трюк позволяет сэкономить 4 Кбайт нулей на диске в исполняемом файле. [9]