我只是测试一下我可以将这个 C++ 代码编写得有多小
#include <iostream>
using namespace std;
int main() {
cout << "hi";
}
Run Code Online (Sandbox Code Playgroud)
使用此 zsh 命令:
g++ test.cpp -Os -g -o main
Run Code Online (Sandbox Code Playgroud)
但我能做到的最小是52 Kb,那么有什么办法可以让它更小呢?
使用 g++ 11.2 的代码和编译器标志,我得到了35,8kB可执行文件(可以通过使用不同的编译器版本或目标系统来解释不同的结果)。
-g标志(GDB GNU 调试器或 LLDB Clang/LLVM 调试器的调试符号)会将输出文件的大小减小到16,3kB。#include <stdio.h>
int main(){
fputs("hi", stdout);
return 0; // doesn't change the output, only here for completeness sake
}
Run Code Online (Sandbox Code Playgroud)
使用clang编译上述代码进一步将输出可执行文件的大小减少到15,9kB。
添加-s标志(剥离调试信息):14,5kBclang (使用和得到相同的结果g++ 11.2)
比较表(最佳结果以粗体显示):
| 代码 | 编译器 | 旗帜 | 尺寸 | 步 |
|---|---|---|---|---|
| 原来的 | 克++8.5.0 | -Os-g | 38 496 乙 | |
| -Os | 16304乙 | |||
| -Os -s | 14 464 乙 | |||
| 克++11.2.0 | -Os-g | 35 848 乙 | 0 | |
| -Os | 16 320 乙 | 1 | ||
| -Os -s | 14 464 乙 | |||
| 铿锵11.0.1 | -Os-g | 30 736 B | ||
| -Os | 16304乙 | |||
| -Os-g | 14 552 乙 | |||
| 铿锵13.0.0 | -Os-g | 29 312 乙 | ||
| -Os | 16232乙 | |||
| -Os -s | 14 488 乙 | |||
| 修改的 | 克++8.5.0 | -Os-g | 18 552 乙 | |
| -Os | 16 000 乙 | |||
| -Os -s | 14 464 乙 | |||
| 克++11.2.0 | -Os-g | 18616乙 | ||
| -Os | 16 000 乙 | 2 | ||
| -Os -s | 14 464 乙 | |||
| 铿锵11.0.1 | -Os-g | 16720乙 | ||
| -Os | 15960乙 | |||
| -Os -s | 14 528 乙 | |||
| 铿锵13.0.0 | -Os-g | 16640乙 | ||
| -Os | 15 888 乙 | 3 | ||
| -Os -s | 14 464 乙 | 4 |
| 归档时间: |
|
| 查看次数: |
1307 次 |
| 最近记录: |