PTT推薦

Re: [問卦] 業界寫程式用 i++ 多還是 ++i 多?

看板Gossiping標題Re: [問卦] 業界寫程式用 i++ 多還是 ++i 多?作者
KILLE
(啃)
時間推噓 9 推:10 噓:1 →:7

int i = 0;
原則上 i++;與 ++i; 在單運算時 是完全等價

不過若
int a = i++; (a為0)

int a = ++i; (a為1)
當然不一樣 這是廢話 會寫代碼的人當然知


這要討論的是
int a = i++; 與 int a = ++i; 效能上有無差別?

對x86 還有 高效能的arm (cortex-m8以上) 是不同的


int a = i++ 可寫成

int ii = i;
a = ii;
i = ii + 1;

注意到 後面兩行是完全無關 可併行

這時亂序運行引擎就施力點了

他派出去兩組人馬 分頭做 然後都是有效結果 自然效能是有所提升


反之 int a = ++i;

這樣一定要等i++做完 再做i賦值到a

亂數運行在這還是會派兩組人馬來幹 一樣一組賦值(到a)一組遞加

但做賦值那組是做白工 因為最終要的是遞加後再賦值



以上技巧 是有關編程優化

有興趣請參考 https://www.agner.org/optimize/#manuals

(看第一卷C++就好 算通論 後面優化intel AMD威盛實在沒什麼意思)




※ 引述《zzzz8931 (宅男)》之銘言:
: 寫程式要讓一個變數加一有很多種方式,
: 以 C 語言的索引 i 為例,
: 其中兩種方法為在 i 前面寫 ++ 和在 i 後面寫 ++,
: 業界寫程式用 i++ 多還是 ++i 多?

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.159.31 (臺灣)
PTT 網址
※ 編輯: KILLE (111.248.159.31 臺灣), 06/28/2022 18:35:32

kuninaka 06/28 18:34沒有

aether982 06/28 18:36沒有

eknbz 06/28 18:36所以效率是看各家compiler而定?

不是編譯器 亂序運行是CPU內部機制 我們無法操作

※ 編輯: KILLE (111.248.159.31 臺灣), 06/28/2022 18:37:28

sourbait 06/28 18:36另類大端小端之爭

backzerg 06/28 18:36窩血的程式會動就100分惹

ssccg 06/28 18:37討論兩行做不同事的程式效能有無差別是在??

leoloveivy 06/28 18:40我覺得現在cpu schedule 沒那麼智障

stja 06/28 18:41

pumapupa 06/28 18:44長知識了

jupei 06/28 18:46同六樓

phenom1 06/28 18:48還是有做事啊 怎麼會是白工?你是說在等

phenom1 06/28 18:49待++完成的這段時間是在空等的意思嗎?

miname 06/28 18:51Superscalar啦,這哪有亂序的要素?

zaqimon 06/28 19:07現在CPU都大小核了 CPU會自己分配

veryGY 06/28 19:40重點在於i是不是object阿 笑

AVideoIsTrue 06/28 22:33比較兩個不同運算子的效率有意義嗎

AVideoIsTrue 06/28 22:33

pacers 06/28 23:00這兩行結果也不一樣 是要比較什麼?