精華區beta Programming 關於我們 聯絡資訊
※ 引述《noguest.bbs@ptt.cc (guest)》之銘言: > ※ 引述《leicheong.bbs@bbs.sayya.org (理昌)》之銘言: > : 你舉的是針對const做最佳化的情況, 當然會這樣. > : 如果A和B本身都是用#define宣告的話, 代入D的只會是compile time運算後 > : A+B的結果而已. (雖然相信有跑optimization下用const也是有相同的結果) > 這個例子並不是針對 const 做最佳化的情形, 而是在 compiler time > 時無法算出 const 或 #define 值的情形. 只要在 compiler time 不能 > 解析,使用 const 就會比較佳. 在上文中已經證實, 你在前文中舉的這個例子並沒有為使用const 的執碼碼帶來任何速度上的優勢. > : 再說, 我從來都沒有說過在做運算式時#define比const好, 只是單純地 > : 想糾正原發文者想把#define全改成const的想法. 你就不需要把我沒說 > : 的都自動代入了. > 這裡是回應你之前提的使用 const 會比用 #define 增加 cache miss 及會 > 造成執行效率低的情形, 指出這個說法是不正確的. 在昨天貼的文已經證明, 用const在pass parameter時產生的執行碼 長度, 比用#define長許多(我也不知道為什麼). > : Btw, 你有沒有想過, 為什麼在Managed code中M$的編譯器是把const宣告 > : 自動變成#define, 而不是把#define宣告變成const? > 那你有沒有想過現在 compiler 競爭這麼激烈, 如果使用 #define 能像你 > 所說的提高執行效率, 為什麼大部份的 compiler 都不去做這麼簡單的改變 > 來得到好處呢? 這是一條沒有意義的問題, 因為大部份的compiler的output都不支援 這種變換. 因為這種變換只在JIT類的執行方式才有意義, 而另一支援JIT的 語言(Java)不支援#define preprocessor directive. 你有興趣的話倒可以找一下mono的執行檔有沒有做這種變換... -- ※ Origin: SayYA 資訊站 <bbs.sayya.org> ◆ From: ip-84-126-134-202.rev.dyxnet.com