私が試すWindowsシステムはありませんが、Linuxでは、静的にコンパイルされたRust hello worldは実際には同等のCよりも小さくなっています。サイズに大きな違いがある場合は、おそらくRust実行可能ファイルをリンクしているためです。静的にCを動的に。
動的リンクでは、実行可能ファイルだけでなく、すべての動的ライブラリのサイズも考慮する必要があります。
したがって、リンゴとリンゴを比較する場合は、両方が動的であるか、両方が静的であるかを確認する必要があります。コンパイラーによってデフォルトが異なるため、コンパイラーのデフォルトに依存して同じ結果を生成することはできません。
あなたが興味があるなら、これが私の結果です:
-rw-r--r-- 1 aij aij 63 Apr 5 14:26 printf.c
-rwxr-xr-x 1 aij aij 6696 Apr 5 14:27 printf.dyn
-rwxr-xr-x 1 aij aij 829344 4月5日14:27 printf.static
-rw-r--r-- 1 aij aij 59 Apr 5 14:26 puts.c
-rwxr-xr-x 1 aij aij 6696 Apr 5 14:27 puts.dyn
-rwxr-xr-x 1 aij aij 829344 Apr 5 14:27 puts.static
-rwxr-xr-x 1 aij aij 8712 Apr 5 14:28 rust.dyn
-rw-r--r-- 1 aij aij 46 Apr 5 14:09 rust.rs
-rwxr-xr-x 1 aij aij 661496 Apr 5 14:28 rust.static
これらは、デフォルトのオプションと-staticfor gccおよび-C prefer-dynamicfor rustc。
CのHello Worldには2つのバージョンがありましたputs()。使用するリンクの数が少ないコンパイルユニットになると考えたためです。
Windowsで再現したい場合は、次のソースを使用します。
printf.c:
#include <stdio.h>
int main() {
printf("Hello, world!\n");
}
puts.c:
#include <stdio.h>
int main() {
puts("Hello, world!");
}
rust.rs
fn main() {
println!("Hello, world!");
}
また、デバッグ情報の量や最適化レベルの違いによっても違いが生じることに注意してください。しかし、大きな違いがある場合は、静的リンクと動的リンクの違いによるものだと思います。