Я экспериментирую с программированием встроенных систем в Rust. Одной из вещей, которые обычно выполняются в C-запуске, является нуль-инициализация сегмента BSS для любых глобальных или статических неинициализированных переменных.Как написать код Rust, который помещает globals/statics в заполненный сегмент BSS?
Однако в Rust я не могу понять, как создать глобальные или статические неинициализированные переменные (даже используя код unsafe
). Другими словами, я не могу понять, как написать любой код Rust, чтобы компилятор каким-то образом заполнил сегмент BSS.
Я пытался ...
static BSS_Data: i32 = unsafe { core::mem::uninitialized() };
.... но компилятор отверг его.
Есть ли способ написать код ржавчины (unsafe
или иначе), что приведет к заполнению сегмента BSS? Гарантируется ли всегда, что сегмент BSS всегда пуст в любой программе, полностью написанной в Rust?
** нулевой инициализацией ** сегмент BSS для любых глобальных или статических ** неинициализированными ** переменные - которые вы хотите? Если вы хотите, чтобы он был инициализирован нулем, тогда * инициализируйте его до нуля *. При этом * вам нужно будет написать любой код, который копирует значения из флеш-памяти и в оперативную память. Это то, что означает голый металл. – Shepmaster
Я ничего не знаю о Rust, но не можете ли вы просто объявить статическую переменную и инициализировать ее до нуля? Это должно заставить его получить выделение в .bss. – Lundin
@ Lundin Если вы инициализируете его в нулевом коде, он перейдет в сегмент данных. – Verax