Jump to content

.bss

В компьютерном программировании символ начала блока (сокращенно .bss или bss ) — это часть объектного файла , исполняемого файла или языка ассемблера кода , которая содержит статически выделенные переменные , которые объявлены, но которым еще не присвоено значение. Его часто называют «разделом bss» или «сегментом bss».

сохраняется только длина раздела bss, но не данные Обычно в объектном файле . Загрузчик программы выделяет память для раздела bss при загрузке программы. Помещая переменные без значений в раздел .bss вместо раздела .data или .rodata, для которого требуются данные начального значения, размер объектного файла уменьшается.

На некоторых платформах часть или весь раздел bss инициализируется нулями. Unix-подобные системы и Windows инициализируют раздел bss нулем, который, таким образом, можно использовать для статически выделенных переменных C и C++ , которые инициализируются всеми нулевыми битами. Операционные системы могут использовать метод, называемый «заполнение нулями по требованию», для эффективной реализации сегмента bss. [1] инициализируется нулем системой времени выполнения C. Во встроенном программном обеспечении сегмент bss отображается в памяти, которая перед этим main() вводится. Некоторые системы времени выполнения C могут разрешать не инициализировать часть сегмента bss; Переменные C должны быть явно помещены в эту часть сегмента bss. [2]

В некоторых компьютерных архитектурах также двоичный интерфейс приложения поддерживает сегмент sbss для «малых данных». Обычно доступ к этим элементам данных можно получить с помощью более коротких инструкций, которые могут иметь доступ только к определенному диапазону адресов. Архитектуры, поддерживающие локальное хранилище потока, могут использовать раздел tbss для неинициализированных статических данных, помеченных как локальные для потока. [3]

Источник

[ редактировать ]
Здесь показано типичное расположение программной памяти простого компьютера с текстом, различными данными, а также секциями стека и кучи.

Исторически BSS (от Block Started by Symbol ) — это псевдооперация в UA-SAP (United Aircraft Символическая программа сборки самолетов), ассемблере, разработанном в середине 1950-х годов для IBM 704 Роем Наттом, Уолтером Рэмшоу и другими в United. Авиационная корпорация . [4] [5] Ключевое слово BSS позже было включено в программу ассемблера FORTRAN. [6] (FAP) и программа сборки макросов [7] (MAP), компьютеров стандартные ассемблеры IBM для 709 и 7090/94 . Он определял метку (то есть символ) и резервировал блок неинициализированного пространства для заданного количества слов . [8] В этой ситуации BSS служил сокращением вместо индивидуального резервирования ряда отдельных небольших ячеек данных. Некоторые ассемблеры поддерживают дополнительную или альтернативную директиву BES для блока, завершенного символом , где указанный символ соответствует концу зарезервированного блока. [9]

BSS на языке C

[ редактировать ]

В C статически выделенные объекты без явного инициализатора инициализируются нулем (для арифметических типов) или нулевым указателем (для типов указателей). Реализации C обычно представляют нулевые значения и значения нулевого указателя, используя битовый шаблон, состоящий исключительно из битов с нулевыми значениями (несмотря на то, что заполнение bss нулем не требуется по стандарту C, все переменные в .bss должны быть индивидуально инициализированы до определенного вида). нулей в соответствии с разделом 6.7.8 стандарта C ISO 9899:1999 или разделом 6.7.9 для более новых стандартов). Следовательно, сегмент BSS обычно включает в себя все неинициализированные объекты (как переменные, так и константы ), объявленные в области файла (т. е. вне любой функции), а также неинициализированные статические локальные переменные ( локальные переменные, объявленные с помощью static ключевое слово ); Однако статические локальные константы должны быть инициализированы при объявлении, поскольку они не имеют отдельного объявления и, следовательно, обычно не находятся в разделе BSS, хотя они могут быть неявно или явно инициализированы нулем. Реализация также может назначать разделу BSS статически выделенные переменные и константы, инициализированные значением, состоящим исключительно из нулевых битов.

Питер ван дер Линден , программист и автор C, говорит: «Некоторым людям нравится помнить это как «Лучше экономить пространство». Поскольку сегмент BSS содержит только переменные, которые еще не имеют никакого значения, на самом деле в этом нет необходимости. сохраните образ этих переменных. Размер, который потребуется BSS во время выполнения, записывается в объектный файл, но BSS (в отличие от сегмента данных) не занимает никакого фактического места в объектном файле». [10]

BSS на Фортране

[ редактировать ]

В Фортране в этом сегменте размещаются общие переменные блока. [11] Некоторые компиляторы могут для 64-битных наборов команд ограничивать смещения в инструкциях, обращающихся к этому сегменту, до 32 бит, ограничивая его размер до 2 ГБ или 4 ГБ. [12] [13] [14] Также обратите внимание, что Фортран не требует инициализации статических данных нулевым значением. В тех системах, где сегмент bss инициализируется нулевым значением, помещение общих переменных блока и других статических данных в этот сегмент гарантирует, что он будет нулевым, но для переносимости программистам не следует от этого зависеть.

См. также

[ редактировать ]
  1. ^ МакКьюсик, Маршалл Кирк ; Карелс, Майкл Дж. (1986). «Новая реализация виртуальной памяти для Berkeley UNIX» (PDF) . Калифорнийский университет, Беркли. п. 3. CiteSeerX   10.1.1.368.432 .
  2. ^ «Разделы памяти» . Домашняя страница AVR Libc .
  3. ^ «Специальные секции ELF» . Стандартная базовая спецификация КПК Linux 3.0RC1 .
  4. ^ Сетевой словарь . Джаввин Пресс, 2007, с. 70.
  5. ^ Кодирование для компьютера MIT-IBM 704, октябрь 1957 г., стр. В-10
  6. ^ ПРОГРАММА АССАМБЛЕИ ФОРТРАНА (FAP) для IBM 709/7090 (PDF) . ИБМ. 1961. с. 30. J28-6098-1 . Проверено 18 октября 2017 г.
  7. ^ IBM 7090/7094 Операционная система IBSYS версии 13 Язык программы макросов (MAP) (PDF) . ИБМ. 1963. С28-6392-4.
  8. ^ Тимар, Тед; и др. (1996). «Unix — Часто задаваемые вопросы (1/7)» . Вопрос 1.3.
  9. ^ Фонд свободного программного обеспечения, Inc. «38.9. Директивы» . Использование как: Использование ассемблера Gnu . Архивировано из оригинала 19 марта 2014 года . Проверено 22 февраля 2014 г.
  10. ^ Питер ван дер Линден, Экспертное программирование на C: Секреты Deep C , Prentice Hall 1994, стр. 141
  11. ^ Как Fortran 77 распределяет переменные общего блока?
  12. ^ «Опции IBM RS/6000 и PowerPC» . Использование коллекции компиляторов GNU (GCC) — GCC 7.2.0 .
  13. ^ «СПАРК Опционы» . Использование коллекции компиляторов GNU (GCC) — GCC 7.2.0 .
  14. ^ «Параметры x86» . Использование коллекции компиляторов GNU (GCC) — GCC 7.2.0 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4cab9d7ff836410df722eed346f98db9__1722229200
URL1:https://arc.ask3.ru/arc/aa/4c/b9/4cab9d7ff836410df722eed346f98db9.html
Заголовок, (Title) документа по адресу, URL1:
.bss - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)