连接自产静态库和工程自包含实现的PEsize比较.
来源:互联网 发布:可编程显示器软件 编辑:程序博客网 时间:2024/05/01 23:45
最近的工作任务不允许使用dll, 为了复用代码, 使用了静态库, 将UI层之外的逻辑层和基础函数层都封装成静态库.
昨天下午,改完程序,功能性部分完成。领导说:程序体积太大了,要减肥。
因为另外一个同事写的类似工程才不到1MB.
推测: 因为包含的静态库中包含了太多不用的函数。
因为时间比较紧急,情急之下,直接将那个工程包含的静态库的依赖关系清掉.
一边编译,一边将需要的函数直接编到本工程下面
简单的列了一个文件functionA.*(.h, .cpp), functionB.*(.h, .cpp) ..., 用了将近2个小时将工程编译过。
因为工程的编译设置并没有改,编译后,可以看到工程减肥了200K.
将工程设置切到release版, 采用 Maximize Speed (/O2), 不产生调试信息, PE size只有700K了. 搞定.
心里还有一点小疑问,采用静态库,开始必然是为某个工程准备的。其他工程使用时,总有用不到的函数。
会不会不同的程序使用静态库,都产生肥胖的效果呢?
正好这几天发现基础函数层,有业务逻辑的部分需要重构,拆出来,使基础函数层能被别的工程单独使用。
拆好后,验证了这个问题。
* 同样的工程(就是昨天下午改的那个字包含实现,减肥的那个), 这回还是连接逻辑层+基础函数层。
编译设置还是采用 /O2 + 不产生调试信息,编译完之后是 699K。 比手工字包含的还要小...
* 单独写一个测试程序,挂上同样的逻辑层+基础函数层, 随便调用了静态库中的1,2个函数, 采用了 /O2 + 不产生调试信息, 编译出来90K,
通过试验可以发现,Release版优化后,不会产生用不到的函数产生的PE size肥大问题.
在不允许使用DLL的情况下,多个工程使用相同的静态库,工程便于维护.
以前没注意过静态库和程序字包含实现的区别, 导致昨天浪费了2小时~.
- 连接自产静态库和工程自包含实现的PEsize比较.
- 包含C和.cu的工程实现
- pesize的作用
- 【CUDA学习-原创】包含C和.cu的工程实现!
- CUDA: 包含C和.cu的工程实现
- jsp的动态包含和静态包含
- 静态包含和动态包含的区别
- JSP的静态包含和动态包含
- 静态包含和动态包含的区别
- 静态包含和动态包含的区别
- 采用ffmpeg静态库连接的视频应用工程调试
- 自连接 in和exits比较
- 静态和静态包含
- Okhttp连接https添加自产证书
- 静态html文件包含html的实现
- 静态包含和动态包含
- 静态连接库的生成和使用
- JSP的动态包含和静态包含详解
- 截屏闪光
- Spring配置数据源的四种方式
- Swift学习笔记--Swift入门
- 三星I9220刷机包 第48期百度云ROM 安卓4.2 公测版
- c++习题1_B_c++继承改错
- 连接自产静态库和工程自包含实现的PEsize比较.
- Android系列教程之十:Intents and Intent Filters(一)
- 第101天
- mmap文件转换为mm文件
- Common Mistakes Made By Online College Students
- qt增加进度对话框
- 第二次试验--算法基本功和综合思考
- 解决 Eclipse 项目有红感叹号的方法(图文)
- qt增加错误信息对话框