为何无标准库的极简Rust库文件体积远大于C目标文件?
为何无标准库的极简Rust库文件体积远大于C目标文件?
最近我做了个小测试,对比极简的Rust静态库和C目标文件的体积,发现了一个有意思的现象,来跟大家聊聊:
首先是Rust部分,我写了一个极简的库文件simple_rust.rs,代码如下:
#![no_std] pub fn add(a: i32, b: i32) -> i32 { a + b }
用rustc 1.94.0版本编译,命令是:rustc simple_rust.rs -C opt-level="z" --crate-type lib
编译后得到了libsimple_rust.rlib,大小是5248字节。
然后是C的部分,对应的文件simple_c.c代码很简单:
int add(int a, int b) { return a+b; }
用gcc 15.01版本编译,命令是:gcc -c simple_c.c
得到的simple_c.o目标文件大小只有1288字节(测试环境都是Ubuntu Linux)。
这么一比,Rust生成的库文件体积大概是C目标文件的4倍大。
我之前了解到,Rust可执行文件通常比C大的原因是默认静态链接标准库,而C一般是动态链接。但这次的情况不一样啊——我写的Rust代码用了#![no_std],完全没用到标准库,按说两个文件都不会链接额外的库才对。
后来我查了些资料,发现Rust的.rlib文件里不只是包含机器目标代码,还附带了LLVM字节码、元数据以及符号表。我猜测这些额外的内容就是导致Rust库体积偏大的主要原因,但不确定是不是还有其他我没注意到的因素。
备注:内容来源于stack exchange,提问作者Angle.Bracket
相关产品推荐
相关产品推荐

