精華區beta Programming 關於我們 聯絡資訊
※ 引述《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