我没有任何 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 Apr 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
这些是使用 gcc (Debian 4.9.2-10) 4.9.2 和 rustc 1.0.0-nightly (d17d6e7f1 2015-04-02) (built 2015-04-03) 编译的,都带有默认选项和-static
for gcc 和-C prefer-dynamic
for锈迹斑斑
我有两个版本的 C hello world,因为我认为使用puts()
可能会链接更少的编译单元。
如果你想尝试在 Windows 上重现它,这里是我使用的来源:
printf.c:
#include <stdio.h>
int main() {
printf("Hello, world!\n");
}
放.c:
#include <stdio.h>
int main() {
puts("Hello, world!");
}
锈.rs
fn main() {
println!("Hello, world!");
}
另外,请记住,不同数量的调试信息或不同的优化级别也会产生影响。但我预计,如果您看到巨大的差异,那是由于静态链接与动态链接。