作者:
deo2000 (800IM)
2013-01-12 09:49:59推 askacis:我剛用gcc試了一下,兩種寫法翻出來的ASM是一樣的 01/12 02:36
→ askacis:這樣犧牲可讀性的寫法真的有比較好? 我也寫過MCU,也知道 01/12 02:37
→ askacis:可能是我搞錯啦~只是不曉得原原PO有沒有驗證過到底省多少? 01/12 02:51
用 keil 3 編出來的組語,如果只有 if(敘述式) V.S. (敘述式)&& 的確一樣。
但是我當初的狀況,其實是要對N為奇數或偶數,做不同運算,
所以我比較 「if-else if」 V.S. 「()&& !()&&」兩種語法的組語
後者雖然少一行,但我對組語不熟,也不敢99.9%說少這一行就比較快,
所以貼上來讓大家公評,如果後者沒比較快,我就為此事道歉
code compare
![]()
如果要說後者code style不符合某些業界的習慣,造成團隊效率降低我承認,
我並非有業界經驗的人,他們可以對新人這樣要求,或說即戰力不高,
但以此評價新人的長期能力則會失準
作者:
Kaeze (HaFa Adai)
2013-01-12 09:54:00是說對組語不熟,當初怎麼評斷這樣效率有沒有比較好?
作者:
comipa (綾崎若èœå®¶å¾¡ç”¨)
2013-01-12 10:09:00P2是奇數的話,應該左邊比較快.中間就直接ret了.而且不是奇數當然就是偶數..幹嘛判斷兩次..
作者:
patoo (完了完了 要變砲灰了 )
2013-01-12 10:11:00是說左邊應該不需要第2個if吧 P2&1 不是0就是1 else就好了..
作者:
comipa (綾崎若èœå®¶å¾¡ç”¨)
2013-01-12 10:12:00樓上無誤..
結論...原PO的code跑更慢~~~~~~~~~~~~~~~~~~~~~~~~
除非你能肯定沒有更好的寫法,不然有時候compiler本身的優化是更好的
作者:
jlhc (H)
2013-01-12 10:58:00其實大家在這過程中都進步了 原PO還是給了大家討論的發展空間
只不過比面試主管多懂一個冷門又不實用的寫法 就上來酸他
你的code反而跑得更慢, 而且又難看! 有很了不起嗎?
作者:
comipa (綾崎若èœå®¶å¾¡ç”¨)
2013-01-12 11:17:00我不認同AMI主管講話方式,不過TechJob焦點本來就是在求職你現在在這邊喊焦點是在程式寫法..不是白說的嗎...
作者:
comipa (綾崎若èœå®¶å¾¡ç”¨)
2013-01-12 11:26:00所以一個是沒看過的寫法就先全盤否認,一個是用一些冷僻用法上來討拍(然後這寫法也沒比較好)...
作者:
askacis (ASKA)
2013-01-12 11:38:00那主管應該很久沒面試了,很多公司喜歡出這樣的題目考人XD
作者:
askacis (ASKA)
2013-01-12 11:41:00不過原PO也學到不用%取餘數的方法,大家開心就好啦XD
作者:
askacis (ASKA)
2013-01-12 11:46:00要是我是主管,不用%取餘得到的分數會比原PO的寫法來的高
不同CPU架構的compiler會有差異, 你覺得效能好的寫法在某些cpu上不見得試用, 而且現在的cpu有很多偷吃步的作法
像是superscalar pipeline.. 所以我覺得你一直在爭論哪一種方式才是最佳解很沒意義,要看CPU架構採取不同的方式
而且可讀性/軟體軟體架構我覺得才是日後發展的關鍵"適用", 筆誤
作者:
RealJustice (Nice to Meet You~)
2013-01-12 11:52:00樓上也是正解 不保證快 保證難懂 根本沒價值
而且光是你會用%來判斷奇偶數這點,就已經不是效能的保證
作者:
RealJustice (Nice to Meet You~)
2013-01-12 11:56:00樓上突破盲點了 說老實話我才被點醒 原PO懂了沒?
作者:
RealJustice (Nice to Meet You~)
2013-01-12 11:58:00原PO去查怎麼判斷奇偶數更快吧 效能可能差到百倍千倍
作者:
RealJustice (Nice to Meet You~)
2013-01-12 12:41:00那你的方法好在哪裡? ^_^ 再來 MOD的速度問題解決了?
作者:
askacis (ASKA)
2013-01-12 13:17:00那是編譯器聰明,跟你沒有關係XD
作者:
askacis (ASKA)
2013-01-12 13:19:00說難聽點,光用%做運算就會讓人質疑你有沒有寫過mcu
作者:
askacis (ASKA)
2013-01-12 13:20:00你拿語法出來說嘴只會讓閱聽者覺得是在炫技
作者:
askacis (ASKA)
2013-01-12 13:22:00如果你面試題目都做對再來跟主管討論語法
作者:
askacis (ASKA)
2013-01-12 13:23:00才會讓人覺得你有點credit~~
作者:
askacis (ASKA)
2013-01-12 13:25:00不想對剛畢業的人說重話,但是你的態度還真讓人不敢恭維
會完全一樣是因為Keil C的compiler幫你做掉了
但不能保證每種cpu core的指令集都支援類似的指令
像是x86, ARM, PowerPC, mips,每家都會有自己的應用
有興趣可以去看看ARM的application note, 裡面有一些文
件就是有特別說明對於ARM架構來說, 用除法方式來做計算的缺點, 當然如果你覺得現代的compiler技術很聰明,不需
我們開發時格外小心~ 那我也沒話說, 鬼打牆到此為止 XD
我只能說演算法/架構才是一切的基礎, coding style是可
以方便後續開發人員參與討論或trace code的方式
而且我想你既然都把asm秀出來做比較, 很明顯就是編譯器
本來就會做一些最佳化的動作,那還不如寫得易懂有條理
我想大家的重點是在這裡, 而不是硬要定你對語法的敏銳度
現在的軟體開發不管是大型系統或是小型的SoC,整個架構都
很複雜, 分工也很細,不是每個人對語法的進階技巧都熟悉
否則也不會有一堆公司強調SW必遵守Coding Convention
你先試試看optmiztion關掉,再看看後面會不會跑
作者:
hahafox (Andy)
2013-01-13 22:47:00難道我會return EFI_SUCCESS;也要拿來說嘴?????
作者: WPC001 (好悶, 迷惘~~) 2013-01-13 23:31:00
Keil跑得起來很了不起嗎? 萬一遇到別家的編譯器編不過時呢?
作者:
ccd1006 (吸血鬼)
2013-01-14 00:02:00不要在"最佳化"上面打轉,AMI的考題就助教大人您自評應該
作者:
ccd1006 (吸血鬼)
2013-01-14 00:03:00應該能夠得幾分啊?
作者:
RealJustice (Nice to Meet You~)
2013-01-14 07:50:00樓上大大 他不會用&1判斷奇偶數 談效能根本差很遠
作者: Gaak 2013-02-01 09:25:00
結果那個主管要叫你在去嗎~~ ?
作者: DeanMX 2013-03-22 00:38:00
()&& !()&& 事實上是兩個if, 不能拿if-else if做比較, asm一定會不一樣的