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

У меня иногда мелькает вопрос, чем занимаются компьютеры, когда мы на них не глядим. Какие-то бесполезные биты на байты множат. 😀
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org