Re: [問題] c++ 和 ++c 的差別在哪裡
※ 引述《kobedokobe (科比督科比)》之銘言:
: 之前看到一本討論C++寫法的書
: 裡面提到
: 如果 c++ 和++c 在程式中作用一樣的話
: 寫 ++c 會比較好
: 也就是說 prefix increment 比 postfix increment 寫法還好
: 但書中沒有提到原因
: 想請問它們到底差在哪裡?
因為寫前序比較直覺
a = c++; 一式
a = ++c; 二式
第一式的a與c值不一樣
第二式的a與c值相同
所以寫第二式比較不會出現程式缺陷
現在要問的 (intel) CPU運行第一式還是第二式快
答案是第一式
因為在組語中是這樣的 (為好讀 a, c還是寫成a, c)
第一式:
MOV EAX, c;
MOV a, EAX;
INC EAX;
MOV c, EAX;
第二式:
MOV EAX, c;
INC EAX;
MOV a, EAX;
MOV c, EAX;
其中黃色是可以同時做的
我們在寫組語時 會覺的寄存器(register)是唯一 這樣其實個假像
其實CPU內部根本不會去分EAX, EBX... 這機制叫寄存器重命名
更重要的,X86寄存器根本不是只有 EAX, EBX...等八個
具體幾個,是要看花多少錢來買CPU來決定
CPU看到指令後 會分配內部寄存器去運行指令
運行的方式不是一行一行做 是一次抓數行指令一起幹
後面再有個機制去評斷做出來的結果是否有效
做對就下回合跳過;做錯就下回合再幹次
簡單講,就是吃定不可能每行指令都有相依性
一定有可以同時幹還會對的狀況
如上面兩例 若一次抓後三行
例一 抓起來是前兩行對 最後一行錯
例二 因為有INC這指令 造成抓起來的只有INC這行有效
這抓起來一起幹的機制叫亂數運行
至於一次抓多少 一樣是由花多少錢買CPU決定
一堆廢言 總之就是寫後序會比較好
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.176.104.49
推
03/25 08:59, , 1F
03/25 08:59, 1F
※ 編輯: Move192 來自: 180.176.104.49 (03/25 09:46)
推
03/25 10:10, , 2F
03/25 10:10, 2F
推
03/25 10:50, , 3F
03/25 10:50, 3F
推
03/25 11:30, , 4F
03/25 11:30, 4F
推
03/25 12:30, , 5F
03/25 12:30, 5F
推
03/25 13:02, , 6F
03/25 13:02, 6F
推
03/30 10:52, , 7F
03/30 10:52, 7F
推
03/30 22:56, , 8F
03/30 22:56, 8F
→
03/30 22:57, , 9F
03/30 22:57, 9F
→
03/30 22:58, , 10F
03/30 22:58, 10F
→
03/30 22:59, , 11F
03/30 22:59, 11F
推
04/01 17:44, , 12F
04/01 17:44, 12F
→
04/01 17:45, , 13F
04/01 17:45, 13F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):