Первоначальная идея все еще существует, хотя поверх нее есть слои запутывания для локальных символов, небольших ссылок, общих библиотек и тому подобного.
Но все по-прежнему основано на оригинальной простой модели, и это стоит знать. Идея состоит в том, что есть три сегмента.
- .text
Это код программы.
- .data
Это инициализированные данные.
- .bss
Это неинициализированные данные.
Bss является особенным: .bss объекты не занимают места в файле объектов, и, группируя все символы, которые специально не инициализированы вместе, их можно легко обнулить сразу.
Статика имеет несколько значений. В каком-то смысле это просто атрибут символа, который сообщает компоновщику, является ли он локальным для объектного модуля или может быть глобально связан с другими символами с таким же именем. Он также используется для указания длительности хранения , чтобы отличать объекты внутри функции от автоматических (выделяемых в стеке) объектов.
Таким образом, статическая переменная может быть в данных или в bss в зависимости от того, инициализирована она или нет, как и глобальная.