C语言函数小到什么程度合适,怎样结合性能来综合考虑

雨下路人 发布于 2013/05/21 22:41
阅读 287
收藏 0

我从事LTE 空口 通信协议的处理。用C语言,现在一个很大考虑就是函数该优化,我也知道函数越小相对越好维护。但又担心函数太小会造成太多的函数调用,压栈出栈都耗费资源。 

比如有一段30行左右的代码,需要封装为函数,但我出于性能考虑就没那么做,而是在两个地方都出现了同样的那30行的代码。   这段代码会在每 ms 内被调用5次左右。我们用的是1GHz的DSP 芯片。

到底函数多小才合适呢,或者我们怎么测试性能呢?

加载中
0
zhengyijie
zhengyijie

从代码整洁之道,或者代码大全的书里面能找到到底函数要写成多长,圈复杂度之类的。不过你这个问题不难解决。担心压栈出栈耗资源,出于性能考虑---其实都是你的猜测,两种方法都试一下,用极端点的方法测试一下,看看是否真的耗资源和性能变差了,如果差不多,那就写成一个函数更好些。

0
雨下路人
雨下路人

引用来自“zhengyijie”的答案

从代码整洁之道,或者代码大全的书里面能找到到底函数要写成多长,圈复杂度之类的。不过你这个问题不难解决。担心压栈出栈耗资源,出于性能考虑---其实都是你的猜测,两种方法都试一下,用极端点的方法测试一下,看看是否真的耗资源和性能变差了,如果差不多,那就写成一个函数更好些。

谢谢,给了我找到答案的方向!
0
Lunar_Lin
Lunar_Lin

0. 性能一定是数据说了算数, 靠估计 往往是不靠谱的, 尤其自己没N年开发经验
1. 宏就是C语言的inline函数替代品. 优秀的C代码 基本都优秀的使用了宏.

0
中山野鬼
中山野鬼

函数的优化,不是根据代码量来判定的。@Lunar_Lin 说宏是个常用的方式。函数的优化简单说有三种不同的角度。方便移植、理解、复用;速度;资源占用。

三个角度不通,如果不谈算法策略调整(这个需要根据逻辑、硬件特性、还有数据大概率分布特性来完成),只是代码而言,原则上,针对方便理解、复用来判断。直觉往往是准确的,我的经验哈,越简单的代码描述,同样情况下,效率越高。

子矜
子矜
不明觉厉[4]
0
cut
cut

”这段代码会在每 ms 内被调用5次左右。我们用的是1GHz的DSP 芯片“,按我的经验这个性能的硬件完全没必要考虑这个问题,比起这个东西你更应该考虑怎么提高你的代码移植和复用性。

搞通信其实很多时候性能并不在你因为蛋疼封装了几个函数而产生,大多数情况下都是通讯冲突,各种蛋疼的帧重传产生的,当然产生这些原因还不一定就一个软件问题,况且你的应用并发度并不高,每ms才5次。

测试那个性能空中信号监听设备之类的肯定是需要的,看你一次完全的应用帧中有多少重传的,一共花了多少时间,究竟是发的不好还是收的不好然后去分析。搞完用什么频谱向量分析仪等等的道具配合你排除各种的硬件原因,做这些通讯的东西说实话你一个搞软件的能在性能上起到的作用并没有你想像中的那么大。

一般来说除了上面我说的测试方法,还有个很必要要做的就是误码率测试,这个测试直接会得出你软硬件的性能,用一个带信号源发送预先编制好的信号,然后你软件得到结果后输出匹配,可以算一个错误率出来,而出问题后是软件原因还是硬件原因这个也很好找,用示波器看下就知道。

返回顶部
顶部