※ 引述《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