※ 引述《coldstar.bbs@bbs.cs.nctu.edu.tw (灑落的月光伴著)》之銘言:
> ※ 引述《lolij.bbs@ptt.cc (柔麗招來)》之銘言:
> > 因為工作的關係, 時常使用 Intel C++ Compiler.
> > 這種 code 經過 ICC 最佳化之後, 不會有任何運算出現.
> > 簡單的說, 有算跟沒算從外表看不出來, 因此不需要真的產生程式碼.
> > 如果最後加一行 printf("%d", b);
> > 那麼... compile 出來的組語, 跟 printf("10"); 是一樣的
> > 沒有 a 也沒有 b 會佔用記憶體, 不需要存取, 也沒有 b+=a 的過程.
> > 僅供參考.
> 對這部份有一點疑問
> printf 應該存在於 CRT 已編譯完成的函式庫, 還能被 compiler 最佳化嗎?
> open source 的環境我比較不了解
> 但在 windows 這樣的環境下, 不管是從 lib 檔把機器碼複製進來
> 或是僅 link 到 dynamic library 的對應函式
> compiler 能做的應該只是把 "%d" 的pointer和 b 推進 stack 後呼叫 printf
> 而沒辦法跑進去最佳化吧?
這問題有兩種情況:
在C++中有所謂static lib的東西, 當進行static linking的時候就是
把這些常用的library routine直接寫入執行檔. 我想這種方式下「最佳化」
會有影響. 不過這樣的話會做成「有許多程式碼重複」的不良現像. 產生的
執行檔也會大得多.
至於用DLL的函式庫的話, 大概就沒機會對它動最佳化設定了. 不過記得
在redist. package中的函式庫都是已作最佳化處理的.
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: ip-84-126-134-202.rev.dyxnet.com