Относительно bss сегмента и сегмента данных в Unix

Я читал в своем учебнике Unix, что bss используется для хранения неинициализированных переменных (глобальные объявления). Это означало бы, что статические переменные хранятся отдельно а не в bss. Единственное другое место является сегментом данных.

Вот мой вопрос: сегмент действительно ли bss является частью сегмента данных или является ими два совершенно других набора сегментов памяти? Кроме того, почему сохраняют глобальные переменные отдельно от статических переменных?

5
задан tomkaith13 15 December 2009 в 19:55
поделиться

2 ответа

Исходная идея все еще существует, хотя поверх нее есть уровни обфускации для локальных символов, небольших ссылок, разделяемых библиотек и т. Д.

Но все по-прежнему основано на Оригинальная простая модель и так стоит знать. Идея состоит в том, что есть три сегмента.

  • .text
    Это программный код.
  • .data
    Это инициализированные данные.
  • .bss
    Это неинициализированные данные.

] Bss особенный: объекты .bss не занимают места в объектном файле, и, сгруппировав вместе все символы, которые не инициализированы специально, их можно легко обнулить сразу.

Статика имеет несколько значений. В каком-то смысле это просто атрибут символа, который сообщает компоновщику, является ли он локальным для объектного модуля или может быть глобально связан с другими символами с тем же именем.

11
ответ дан 13 December 2019 в 19:28
поделиться

bss - это традиционно так называемые неинициализированные переменные, но C и Unix гарантируют, что они инициализированы нулем. (См. this .) Это часть сегмента данных, обычно сразу после пространства программно-статически-инициализированной-переменной. Обычно начало кучи находится чуть выше по памяти, чем у bss.

0
ответ дан 13 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: