我没有任何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)(构建于2015-04-03)编译了这些文件,都是使用默认选项,并在gcc中使用-static
和在rustc中使用-C prefer-dynamic
。
我有两个版本的C hello world,因为我认为使用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!");
}
请记住,不同数量的调试信息或不同的优化级别也会产生影响。但是,如果您看到巨大的差异,则可能是由于静态链接与动态链接之间的区别。