Я читал в своем учебнике Unix, что bss используется для хранения неинициализированных переменных (глобальные объявления). Это означало бы, что статические переменные хранятся отдельно а не в bss. Единственное другое место является сегментом данных.
Вот мой вопрос: сегмент действительно ли bss является частью сегмента данных или является ими два совершенно других набора сегментов памяти? Кроме того, почему сохраняют глобальные переменные отдельно от статических переменных?
Исходная идея все еще существует, хотя поверх нее есть уровни обфускации для локальных символов, небольших ссылок, разделяемых библиотек и т. Д.
Но все по-прежнему основано на Оригинальная простая модель и так стоит знать. Идея состоит в том, что есть три сегмента.
] Bss особенный: объекты .bss не занимают места в объектном файле, и, сгруппировав вместе все символы, которые не инициализированы специально, их можно легко обнулить сразу.
Статика имеет несколько значений. В каком-то смысле это просто атрибут символа, который сообщает компоновщику, является ли он локальным для объектного модуля или может быть глобально связан с другими символами с тем же именем.
bss
- это традиционно так называемые неинициализированные переменные, но C и Unix гарантируют, что они инициализированы нулем. (См. this .) Это часть сегмента данных, обычно сразу после пространства программно-статически-инициализированной-переменной. Обычно начало кучи находится чуть выше по памяти, чем у bss.