[讨论] function pointer比switch和if有效率?

楼主: Zoxge (Zoxge)   2017-05-24 00:29:06
http://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变得较简洁
但能够达到效能更好的原因是什么呢?
作者: james732 (好人超)   2017-05-24 00:34:00
我都把这种问题交给编译器大神
作者: Schottky (顺风相送)   2017-05-24 00:39:00
第一个中文网页也没反组译也没测速,是自己瞎猜的吧 XDD
作者: loveflames (咕啾咕啾魔法阵)   2017-05-24 00:41:00
还真的没听过,下面这个我倒是听过
作者: Schottky (顺风相送)   2017-05-24 00:41:00
同意一楼,最佳化交给 compiler 就好
作者: loveflames (咕啾咕啾魔法阵)   2017-05-24 00:42:00
函数参数传functor比传函数指标快
作者: Schottky (顺风相送)   2017-05-24 00:43:00
找出真正的效能瓶颈再去解决就好,不要把时间花在跑不了
作者: Hazukashiine (私は幸せです)   2017-05-24 00:44:00
Premature optimization is the root of all evil.
作者: Schottky (顺风相送)   2017-05-24 00:44:00
不要把时间花在最佳化一个每秒跑不到一万次的UI小功能上第一个作法来说,compiler 只要头壳没烧坏,switch-case本来就是用查表法 (table access) 来实作了,而且有专用的 CPU instruction 来做,我不相信他这做法有比较快第二个做法则是因为可以制造一种情况,切换/条件判断只在切换 checkbox 时做,而 loop 里面不用再做,只需要无脑呼叫,理论上在常常跑 loop 而很少切换时有帮助但实际上省不了多少时间,反而让程式变难读难维护
作者: littleshan (我要加入剑道社!)   2017-05-24 01:16:00
请仔细看 stackoverflow 的回答吧单层 if/switch 的情况通常都比 function pointer 快
作者: boss0405 (boss)   2017-05-24 09:40:00
switch我记得compiler会建立多个label,第一次比较之后直接jmp,function pointer则需要push/pop的时间,不觉得会比较快
作者: LiloHuang (十年一刻)   2017-05-24 19:12:00
https://goo.gl/qKsfwD compiler 通常满聪明的...
楼主: Zoxge (Zoxge)   2017-05-24 20:28:00
受教了,所以function pointer只是让code变简洁而已吗?@@
作者: littleshan (我要加入剑道社!)   2017-05-24 23:07:00
不,如果你只有简短的if或switch改用function pointer只是让程式看起来更难懂
作者: descent (“雄辩是银,沉默是金”)   2017-05-24 23:15:00
function pointer 用起来很爽, 看code很不爽
作者: boss0405 (boss)   2017-05-24 23:52:00
function pointer在某些HAL相关程式很好用,例如可以根据不同硬件状况接到不同的function,而上层可以无感的使用,或是和structure结合做成一个结构阵列表单,可以自动根据代入的资讯跑相对应的function
作者: tinlans ( )   2017-05-30 05:33:00
你最初设定 function pointer 的地方一定有 if 或 switch,如果不用 function pointer,每个呼叫点都要放 if 或switch,改程式的时候就知道死。

Links booklink

Contact Us: admin [ a t ] ucptt.com