Самый низкоуровневый язык, ага
От: vsb Казахстан  
Дата: 26.09.23 03:32
Оценка: +1 -1 :)
Вроде общепринятая точка зрения, что C ближе всего к железу, ну если не считать языков ассемблера.

Однако есть такая простая конструкция, как глобальные переменные. В частности буферы.

В программах, запускаемых на микроконтроллерах, эта конструкция очень распространена. Объявляем глобальный буфер на 10 кибибайтов и используем его.

Если всмотреться, что происходит при этом, то можно заметить следующее:

1. Язык С гарантирует, что все глобальные переменные инициализируются нулями.

2. Компилятор кладёт этот буфер в секцию `.bss`.

3. Стартап код на ассемблере обнуляет секцию `.bss` сразу после запуска контроллера.

4. _start из libc ещё раз обнуляет секцию `.bss` (видимо для надёжности).

5. Итого наш хиленький процессорчик после подачи питания просто так потратил порядка сотни тысяч тактов, гоняя нули.

6. Наш буфер вообще никак не использует этот факт своего обнуления.

Очень забавно за всем этим наблюдать, конечно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.