我有这个C ++文件:
#include <iostream>
int main(int argc, char *argv[]) {
std::cout << "Hello world!\n";
return 0;
}
用g ++编译后,我得到了一个913KiB大的可执行文件。我很惊讶,因为我认为g ++足够聪明,不能包含STL程序未使用的任何代码或数据。
接下来,我使用了UPX这些设置:upx --overlay=strip
。在此之后,可执行文件的大小减少到142KiB
,减少了85%,没有速度惩罚(我用更复杂的数学程序对此进行了测试)。
根据upx man page:
“覆盖”表示在可执行文件的逻辑结束之后缓存的辅助数据,它通常包含特定于应用程序的数据(这是避免额外数据文件的常见做法,尽管使用资源部分会更好)。
我找不到任何更具体的信息,并留下以下问题:
背景信息:
g++ -Os test.cpp