.bss - .bss

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

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

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

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

Источник

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

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

BSS на C

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

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

BSS на Фортране

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

Смотрите также

использованная литература