> Всё равно же много.Учитывая, что libc вообще-то рантайм библиотека для этой самой сишечки, а не раста, то нормально.
> У меня в Виндовс хелловорлд на Сишечке, собранный посредством TCC (Tiny C
> Compiler by Fabrice Bellard), весит 2048 байт.
Ну, хелловорлд я вам и в 20-100 байтов запулить могу, если брать старые версии виндовс. А PE32 в винде ЕМНИП ограничен минимально прожевываемым самим PE-загрузчиком размером выравнивавия секции (в смысле: section alignment) -- т.е. если без слишном уж грязных хаков, то 0.5-2КБ, зависит от версии винды и от дырявости моей памяти ;)
> TCC, конечно, не мейнстрим вроде GCC, но пусть будет убойным примером ради высшей справедливости.
А убоен он в первую очередь беспощадной бессмысленность такого примера, потому что все же, в конечном итоге интересны совсем не хелловорды? ;)
Ну и:
% cat hw.c && gcc -Os -s hw.c -o hw && ll hw
#include <stdio.h>
int main(void) {
puts("Hello World!");
return 0;
}
-rwxr-x--- 1 анонн wheel 4,8K 12 Nov. 21:00 hw% gcc --version
gcc (FreeBSD Ports Collection) 9.2.0
> Если собирать обычным GCC (была использована версия 4.7.2), то получается 34816 байт
> статически слинкованного сабжа.
В винде - статистически слинкованный? Я что-то пропустил и PE-бинарник уже "годен" (valid) без привязки к kernel32.dll/user32.dll (и они точно-точно не прилинковываются ;) )?
Если слинковать статистически, это выглядит примерно вот так:
gcc -O2 -s -static hw.c -o hw && ll hw
-rwxr-x--- 1 анонн wheel 553K 12 Nov. 21:09 hw
ldd hw
ldd: hw: not a dynamic ELF executable
Сейчас возможно набегут особо поклоннистые поклонники альтератив типа musl и заявят, что я ламо, протому что получить можно в 10 раз меньший бинарник, если использовать прямые руки и т.д. и т.п. - но вообще-то это не принципиально.
В расте тоже можно немного поизвращаться с (расто-std) библиотеками:
https://github.com/johnthagen/min-sized-rust
ldd target/release/min-sized-no_std
target/release/min-sized-no_std:
libc.so.7 => /lib/libc.so.7 (0x800248000)
-rwxr-x--- 2 анонн wheel 15K 12 Nov. 21:25 target/release/min-sized-no_std
Но смысл сего действа все же ускользает от меня (сравнение размера хелловорда ради сравнения размеров хелловордов?)