Из пустого в порожнее
2024-12-20 12:25Взялся я поисследовать Си-шный рантайм. Глянуть, что делается в программе до main() и после. Беру пустую программу:
У меня иногда мелькает вопрос, чем занимаются компьютеры, когда мы на них не глядим. Какие-то бесполезные биты на байты множат. 😀
Компилирую, причём линкую статически, чтобы избежать сложностей динамического загрузчика:$ cat empty.c
int main()
{
// empty
}
Глянем размер бинарника. На процессоре x86_64 под Ubuntu получается 667 килобайт:$ cc -static -Os empty.c -o empty
На процессоре arm64 выходит чуть получше, 497 килобайт:$ size empty
text data bss dec hex filename
667574 23384 22440 713398 ae2b6 empty
Такие объёмы настораживают. Хорошо, запустим и посчитаем количество выполненных машинных команд. На процессоре x86_64:$ size empty
text data bss dec hex filename
497904 22180 21616 541700 84404 empty
На процессоре arm64:$ bintrace -o x86.trace ./empty
$ grep '^0x' x86.trace | wc
170979 1371361 10303769
Ну офигеть просто. Больше ста тысяч команд чтобы просто стартонуть Си-шный код. Неладно что-то в Датском королевстве.$ bintrace -o arm64.trace ./empty
$ grep '^0x' arm64.trace | wc
108719 565684 5186654
У меня иногда мелькает вопрос, чем занимаются компьютеры, когда мы на них не глядим. Какие-то бесполезные биты на байты множат. 😀

no subject
Date: 2024-12-22 04:25 (UTC)