楼主:
Zoxge (Zoxge)
2017-05-24 00:29:06http://fred-zone.blogspot.tw/2008/07/c-switch.html
https://stackoverflow.com/questions/20906060/if-statement-vs-function-pointer
看到上面两篇文章
分别提到function pointerc会比使用switch case和if else效能更好
小弟是觉得function pointer可以让code变得较简洁
但能够达到效能更好的原因是什么呢?
第一个中文网页也没反组译也没测速,是自己瞎猜的吧 XDD
找出真正的效能瓶颈再去解决就好,不要把时间花在跑不了
Premature optimization is the root of all evil.
不要把时间花在最佳化一个每秒跑不到一万次的UI小功能上第一个作法来说,compiler 只要头壳没烧坏,switch-case本来就是用查表法 (table access) 来实作了,而且有专用的 CPU instruction 来做,我不相信他这做法有比较快第二个做法则是因为可以制造一种情况,切换/条件判断只在切换 checkbox 时做,而 loop 里面不用再做,只需要无脑呼叫,理论上在常常跑 loop 而很少切换时有帮助但实际上省不了多少时间,反而让程式变难读难维护
请仔细看 stackoverflow 的回答吧单层 if/switch 的情况通常都比 function pointer 快
switch我记得compiler会建立多个label,第一次比较之后直接jmp,function pointer则需要push/pop的时间,不觉得会比较快
作者: LiloHuang (十年一刻) 2017-05-24 19:12:00
楼主:
Zoxge (Zoxge)
2017-05-24 20:28:00受教了,所以function pointer只是让code变简洁而已吗?@@
不,如果你只有简短的if或switch改用function pointer只是让程式看起来更难懂
作者:
descent (“雄辩是银,沉默是金”)
2017-05-24 23:15:00function pointer 用起来很爽, 看code很不爽
function pointer在某些HAL相关程式很好用,例如可以根据不同硬件状况接到不同的function,而上层可以无感的使用,或是和structure结合做成一个结构阵列表单,可以自动根据代入的资讯跑相对应的function
作者:
tinlans ( )
2017-05-30 05:33:00你最初设定 function pointer 的地方一定有 if 或 switch,如果不用 function pointer,每个呼叫点都要放 if 或switch,改程式的时候就知道死。