常規:數據庫
無 不產生任何調試信息,所以編譯較快
程序數據庫(/Zi):產生幷包含用於調試器的類型信息和符號調試信息的程序數據庫(PDB)。不影響優化,暗示了debug。信息放在pdb文件而不是obj文件。
C7兼容(/Z7):生成包含用於調試器的完整符號調試信息的.obj文件。符號調試信息包括變量的名稱和類型以及函數和行號。不會生成.pdb文件。
用於編輯並繼續的程序數據庫(/Zi):改了以後還能夠繼續調試,不少優化與這個並不兼容。公共語言運行時支持:使用.NET運行時服務。
多處理器編譯:針對多核使用的數組
====================================================緩存
優化:安全
/O 選項控制有助於建立具備最高速度或最小大小的代碼的各類優化。
/O1 爲得到最小大小而優化代碼。
/O2 爲得到最高速度而優化代碼。
/Ob 控制內聯函數展開。
/Od 禁用優化,從而加快編譯並簡化調試。
/Og 啓用全局優化。
/Oi 爲適當的函數調用生成內部函數。
/Os 通知編譯器優選大小優化而非速度優化。
/Ot(默認設置)通知編譯器優選速度優化而非大小優化。
/Ox 選擇徹底優化。
/Oy 取消在調用堆棧上建立框架指針,以更快地進行函數調用。
框架
內聯函數擴展:選擇生成的內聯函數擴展級別
/Ob0 禁用內聯擴展。默認狀況下,擴展由編譯器自行對全部函數進行(一般稱爲自動內聯)。
/Ob1 僅容許對標記爲 inline、__inline 或 __forceinline 的函數或是在類聲明中定義的 C++ 成員函數中進行擴展。
/Ob2 默認值。容許對標記爲 inline、__inline 或 __forceinline 的函數或是編譯器選擇的任何其餘函數進行擴展。
啓用內部函數:用有助於應用程序更快運行的內部函數或其餘特殊形式的函數替換某些函數調用。
使用內部函數的程序比較快,由於它們沒有函數調用系統開銷。可是,因爲建立了附加代碼,它們可能比較大
優化大小和速度
/Os(代碼大小優先)經過指示編譯器優選大小而非速度來最小化 EXE 和 DLL 的大小。 編譯器能夠將許多 C 和 C++ 構造縮小爲功能相似的機器碼序列。 這些差別有時在大小和速度之間提供了折中。 /Os 和 /Ot 選項容許在兩者之間指定一個首選項:
/Ot(代碼速度優先)經過指示編譯器優選速度而非大小來最大化 EXE 和 DLL 的速度。(這是默認設置。)編譯器能夠將許多 C 和 C++ 構造縮小爲功能相似的機器碼序列。 這些差別有時在大小和速度之間提供了折衷。 「最大化速度」(/O2) 選項隱含 /Ot 選項。 /O2 選項組合若干個選項以產生速度很是快的代碼。
若是使用 /Os 或 /Ot,還必須指定 /Og 以優化代碼。
省略幀指針:
此選項能夠加快函數調用的速度,由於無需設置和移除任何框架指針。它還可使一個或多個寄存器(Intel 386 或更高版本上的 EBP)空閒出來,以便存儲頻繁使用的變量和子表達式。
/Oy 啓用框架指針省略,而 /Oy- 禁止省略。 /Oy 僅在 x86 編譯器中可用。
若是代碼須要基於 EBP 進行尋址,能夠在 /Ox 選項後指定 /Oy– 選項,或使用帶「y」和 off 參數的 optimize,以便經過基於 EBP 的尋址得到最大程度的優化。 編譯器可檢測大部分須要基於 EBP 的尋址的狀況(例如,使用 _alloca 和 setjmp 函數以及使用結構化異常處理的狀況)。
啓用纖程安全優化:
經過線程本地存儲區 (TLS) 數組引用用 __declspec(thread) 聲明的數據。 TLS 數組是系統爲每一個線程維護的地址數組。 此數組中的每一個地址提供線程本地存儲區數據的位置。
纖程是輕量對象,由堆棧和寄存器上下文組成,並可安排在各類線程上。 纖程能夠在任意線程上運行。 由於纖程可能會交換出去而且稍後在不一樣的線程上從新啓動,因此 TLS 數組的地址不得緩存或優化爲函數調用中的公共子表達式(有關詳細信息,請參見 /Og(全局優化) 選項)。 /GT 阻止此類優化。
全程序優化:
全程序優化容許編譯器用有關程序中全部模塊的信息執行優化。 若是不執行全程序優化,則基於每一個模塊 (compiland) 執行優化。
默認狀況下,權全程序優化是關閉的,所以必須顯式地啓用它。 可是,也能夠用 /GL- 顯式地禁用它。
使用有關全部模塊的信息,編譯器可以:
跨越函數邊界優化寄存器的使用。
更好地跟蹤對全局數據的修改,容許減小加載和存儲的數目。
更好地跟蹤可能由取消指針引用所修改的項組,減小加載和存儲的數目。
在模塊中內聯某個函數,即便該函數在另外一個模塊中定義。
函數
=====================================================================================優化
預處理器:一些宏定義的相關操做命令行
預處理器定義:定義了一些宏
取消預處理器定義:估計填了就單個取消掉,爲了方便調試代碼
取消全部預處理器定義:取消了以前定義的全部宏
忽略標準包含路徑:禁止編譯器在INCLUDE環境變量指定的目錄中搜索包含文件。
預處理到文件:預處理C和C++源文件並將預處理的輸出寫入到文件。此選項將取消編譯,所以不會生成obj文件。
預處理取消顯示行號:預處理時不使用#line指令。
保留註釋:從源代碼取消註釋條,要求設置「預處理」選項之一
線程
=====================================================================================debug