Раздел BSS и Clearzi - PullRequest
       15

Раздел BSS и Clearzi

1 голос
/ 10 марта 2012

Я знаю, что раздел BSS программы хранит глобальные неинициализированные переменные. Так зачем мне (внутри кода запуска в инструкции ветки "clearzi") проверять, равен ли этот размер раздела "0", а затем продолжать? Я нашел эту часть кода запуска, и это то, что мне нужно понять.

    LDR   r0, =__gnu_bssstart
    LDR   r1, =__gnu_bssend
    MOV   r2, #0

clearzi:
    CMP   r0, r1
    BEQ   clearzi_exit
    STR   r2, [r0]
ADD   r0, r0, #4
    B clearzi

clearzi_exit:

Это лишь малая часть кода запуска.

1 Ответ

2 голосов
/ 11 марта 2012

Этот фрагмент кода очищает раздел BSS. Это переводится как

for (int* p = __gnu_bssstart; p < __gnu_bssend; ++p) *p=0;

Если размер равен нулю, условие никогда не выполняется, поэтому часть инициализации пропускается.

...