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

看板Gossiping作者 (啃)時間1年前 (2022/06/28 18:33), 1年前編輯推噓9(1017)
留言18則, 16人參與, 1年前最新討論串2/2 (看更多)
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.cc), 來自: 111.248.159.31 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1656412410.A.C6B.html ※ 編輯: KILLE (111.248.159.31 臺灣), 06/28/2022 18:35:32

06/28 18:34, 1年前 , 1F
沒有
06/28 18:34, 1F

06/28 18:36, 1年前 , 2F
沒有
06/28 18:36, 2F

06/28 18:36, 1年前 , 3F
所以效率是看各家compiler而定?
06/28 18:36, 3F
不是編譯器 亂序運行是CPU內部機制 我們無法操作 ※ 編輯: KILLE (111.248.159.31 臺灣), 06/28/2022 18:37:28

06/28 18:36, 1年前 , 4F
另類大端小端之爭
06/28 18:36, 4F

06/28 18:36, 1年前 , 5F
窩血的程式會動就100分惹
06/28 18:36, 5F

06/28 18:37, 1年前 , 6F
討論兩行做不同事的程式效能有無差別是在??
06/28 18:37, 6F

06/28 18:40, 1年前 , 7F
我覺得現在cpu schedule 沒那麼智障
06/28 18:40, 7F

06/28 18:41, 1年前 , 8F
06/28 18:41, 8F

06/28 18:44, 1年前 , 9F
長知識了
06/28 18:44, 9F

06/28 18:46, 1年前 , 10F
同六樓
06/28 18:46, 10F

06/28 18:48, 1年前 , 11F
還是有做事啊 怎麼會是白工?你是說在等
06/28 18:48, 11F

06/28 18:49, 1年前 , 12F
待++完成的這段時間是在空等的意思嗎?
06/28 18:49, 12F

06/28 18:51, 1年前 , 13F
Superscalar啦,這哪有亂序的要素?
06/28 18:51, 13F

06/28 19:07, 1年前 , 14F
現在CPU都大小核了 CPU會自己分配
06/28 19:07, 14F

06/28 19:40, 1年前 , 15F
重點在於i是不是object阿 笑
06/28 19:40, 15F

06/28 22:33, 1年前 , 16F
比較兩個不同運算子的效率有意義嗎
06/28 22:33, 16F

06/28 22:33, 1年前 , 17F
06/28 22:33, 17F

06/28 23:00, 1年前 , 18F
這兩行結果也不一樣 是要比較什麼?
06/28 23:00, 18F
文章代碼(AID): #1YkjZwnh (Gossiping)
文章代碼(AID): #1YkjZwnh (Gossiping)