[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
单个程序 Size 优化之压缩后自解压执行
Wu Zhangjin 创作于 2020/03/24
By Falcon of TinyLab.org Dec 09, 2019
前面讨论系统裁剪的时候,提到了内核和文件系统的压缩支持,实际上单个可执行文件也可以这样做。
基本原理跟内核压缩一样,就是先把 vmlinux 压缩一遍,然后把压缩完的内核作为新程序的一部分,在新程序的开头加上解压和执行代码。
这样的解决方案有 UPX,完全开源:
- 首页:UPX: the Ultimate Packer for eXecutables - Homepag…
- 源码:GitHub - upx/upx: UPX - the Ultimate Packer for eX…
需要注意的是,实际使用中,需要保证压缩率产生的收益比加上额外的解压代码要高,否则就没意义。
下面来用一用:
$ sudo apt-get install upx-ucl
$ ls -lh /bin/ls
-rwxr-xr-x 1 root root 124K Mar 3 2017 /bin/ls
$ upx ls
Ultimate Packer for eXecutables
File size Ratio Format Name
------------ ------ --------- -----------
126584->57188 45.18% linux/ElfAMD ls
Packed 1 file.
$ ls -lh ls
-rwxr-xr-x 1 falcon falcon 56K Aug 25 12:48 ls
压缩了有超过 50%。UPX 的压缩成绩是 50~70%,比 gzip 要好,关键是,这个压缩完还是可以执行的。
在内核中类似这样用时间换空间的做法很多,还有 @甜质粥 之前分享的 zram:
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |