编译工具 - GUN编译器 - 去掉未使用的函数

说明

  • 在公司做嵌入式产品开发时,需要想办法减少系统资源占用,由于以下原因,想去掉未使用的函数。
  1. 嵌入式设备资源非常不足,当时只有128M内存,flash只有16M,并且公司要求资源减半,做costdown产品。
  2. 公司员工经验不足,编码习惯不好,以及考虑扩展,定义了很多空函数和未使用的函数。
  3. 链接的库,为了通用,写的比较完善,有很多接口,但是很多只使用到了部分接口。

优化尝试

  • 经过学习以及测试验证得到结论:
  1. 静态库链接时只会将使用到的中间文件链接进程序,不会链接所有文件,因此库文件大小不重要。
  2. 动态库加载进内存,接口丰富的话,代码段占用内存较多,并且动态库本身需要占用存储资源,以及为了实现链接而照成额外的资源占用,并且嵌入式设备中往往只有单个或较少的几个进程。
  • 总结:从上得知,在嵌入式开发中尽量使用静态库而不是动态库。

代码

  • 尝试使用编译器优化选项,但是反汇编得知不管使用任何优化选项,未使用的函数都不会被清除。

可行方法

  • 在编译时,增加编译选项:
-ffunction-sections -fdata-sections //该选项让每个函数和数据独自一段
  • 在链接时,添加选项:
-Wl,-gc-sections //该选项将去除无用的段。
  • 将C代码文件编译成中间文件时是无法确认函数是否会被使用,只有链接时才能知道函数是否被使用。
  • 嵌入式系统中,对程序尺寸要求高,可以这样做,但是一但使用"-Wl,-gc-sections"之后,将无法使用gdb调试,也无法使用gprof工具了,因此只能在release版本使用。

总结

  • 虽然有办法可以实现去掉未使用的函数,但是会造成无法调试的问题,代码质量最好是由程序员来把控,而不是由工具,当前的工具无法非常完美的解决代码质量问题,不然就不需要程序员了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值