Re: [問卦] 業界寫程式用 i++ 多還是 ++i 多?
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
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
06/28 18:36, 5F
→
06/28 18:37,
1年前
, 6F
06/28 18:37, 6F
推
06/28 18:40,
1年前
, 7F
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
06/28 18:51, 13F
推
06/28 19:07,
1年前
, 14F
06/28 19:07, 14F
推
06/28 19:40,
1年前
, 15F
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):