1. 程式人生 > >VC6.0編譯器編譯優化

VC6.0編譯器編譯優化

  • CL.exe的全部命令開關 

    /C:在預處理輸出中保留註釋語句 
    /c:只編譯,不連線,相當於在"Build"選單下選擇了"Compile" 
    /D:定義常量和巨集,與源程式裡的#define 有相同效果 
    /E:預處理C、C++原始檔,將原始檔中所有的預編譯指令及巨集展開,將註釋去掉,然後將前處理器的輸出拷貝至標準輸出裝置輸出,並且在每個檔案的開頭和末尾加入#line 
    /EH:指定編譯器用何種異常處理模型 
    /EP:同/E,只是去掉了#line 
    /F:設定程式的堆疊大小 
    /FA:設定生成何種列表檔案(彙編、彙編與機器碼、彙編與原始碼、彙編與機器碼以及原始碼) 
    /Fa:指定用/FA設定的列表檔案的存放路徑及(或)檔名 
    /FD:生成檔案的相互依賴資訊 
    /Fd:設定程式資料庫檔案(PDB)的存放路徑及(或)檔名 
    /Fe:設定最終可執行檔案的存放路徑及(或)檔名 
    /FI:預處理指定的標頭檔案,與原始檔中的#include有相同效果 
    /Fm:建立map檔案 
    /Fo:設定編譯後Obj檔案的存放路徑及(或)檔名 
    /Fp:設定預編譯檔案(pch)的存放路徑及(或)檔名 
    /FR:生成瀏覽資訊(sbr)檔案 
    /Fr:同/FR,不同之處在於/Fr不包括區域性變數資訊 
    /G3:為80386處理器優化程式碼生成 
    /G4:為80486處理器優化程式碼生成 
    /G5:為Pentium處理器優化程式碼生成 
    /G6:為Pentium Pro處理器優化程式碼生成 
    /GA:為Windows應用程式作優化 
    /GB:為Pentium處理器優化程式碼生成,使用80386、80486、Pentium、Pentium Pro的混合指令集,是程式碼生成的預設選項(程式屬性選項中Processor對應Blend) 
    /GD:為Windows動態庫(dll)作優化,此開關在VC6中沒有實現 
    /Gd:指定使用__cdecl的函式呼叫規則 
    /Ge:啟用堆疊檢測 
    /GF:消除程式中的重複的字串,並將她放到只讀的緩衝區中 
    /Gf:消除程式中的重複字串 
    /Gh:在每個函式的開頭呼叫鉤子(hook)函式--penter 
    /Gi:允許漸進編譯 
    /Gm:允許最小化rebuild 
    /GR:允許執行時型別資訊(Run-Time Type Infomation) 
    /Gr:指定使用__fastcall的函式呼叫規則 
    /Gs:控制堆疊檢測所用記憶體大小 
    /GT:支援用__declspec(thread)分配的資料的fier-safety 
    /GX:允許同步異常處理,與/EHsc開關等價 
    /Gy:允許編譯器將每一個函式封裝成COMDATs的形式,供聯結器呼叫 
    /GZ:允許在Debug build 的時候捕捉Release build的錯誤 
    /Gz:指定使用__stdcall的函式呼叫規則 
    /H:限制外部名字的長度 
    /HELP:列出編譯器的所有的命令開關 
    /I:指定標頭檔案的搜尋路徑 
    /J:將char的預設型別從signed char改成unsigned char 
    /LD:建立一個動態連線庫 
    /LDd:建立一個Debug版本的動態連結庫 
    /link:將指定的選項傳給聯結器 
    /MD:選擇多執行緒、DLL版本的C Run-Time庫 
    /MDd:選擇多執行緒、DLL、Debug版本的C Run-Time庫 
    /ML:選擇單執行緒版本的C Run—Time庫 
    /MLd:選擇單執行緒、Debug版本的C Run—Time庫 
    /MT:選擇多執行緒版本的C Run-Time庫 
    /MTd:選擇多執行緒、Debug版本的C Run—Time庫 
    /nologo:不顯示程式的版權資訊 
    /O1:優化使產生的可執行程式碼最小 
    /O2:優化使產生的可執行程式碼速度最快 
    /Oa:指示編譯器程式裡沒有使用別名,可以提高程式的執行速度 
    /Ob:控制內聯(inline)函式的展開 
    /Od:禁止程式碼優化 
    /Og:使用全域性優化 
    /Oi:用內部函式去代替程式裡的函式呼叫,可以使程式執行的更快,但程式的長度變長 
    /Op:提高浮點數比較運算的一致性 
    /Os:產生儘可能小的可執行程式碼 
    /Ot:產生儘可能塊的可執行程式碼 
    /Ow:指示編譯器在函式體內部沒有使用別名 
    /Ox:組合了幾個優化開關,達到儘可能多的優化 
    /Oy:阻止呼叫堆疊裡建立幀指標 
    /Q1f:對核心級的裝置驅動程式生成單獨的除錯資訊 
    /QI0f:對Pentium 0x0f錯誤指令作修正 
    /Qifdiv:對Pentium FDIV錯誤指令作修正 
    /P:將預處理輸出寫到指定檔案裡,檔案的字尾名為I 
    /TC:將命令列上的所有檔案都當作C源程式編譯,不管字尾名是否為.c 
    /Tc:將指定的檔案當作C源程式編譯,不管字尾名是否為.c 
    /TP:將命令列上的所有檔案都當作C++源程式編譯,不管字尾名是否為.cpp 
    /Tp:將指定檔案當作C++源程式編譯,不管字尾名是否為.cpp 
    /U:去掉一個指定的前面定義的符號或常量 
    /u:去掉所有前面定義的符號或常量 
    /V:在編譯的obj檔案裡嵌入版本號 
    /vd:禁止/允許建構函式置換 
    /vmb:選擇指標的表示方法,使用這個開關,在宣告指向某個類的成員的指標之前,必須先定義這個類
    /vmg:選擇指標的表示方法,使用這個開關,在宣告指向某個類的成員的指標之前,不必先定義這個類,但要首先指定這個類是使用何種繼承方法 
    /vmm:設定指標的表示方法為Single Inheritance and Multiple Inheritance 
    /vms:設定指標的表示方法為Single Inheritance 
    /vmv:設定指標的表示方法為Any class 
    /W:設定警告等級 
    /w:禁止所有警告 
    /X:阻止編譯器搜尋標準的include 目錄 
    /Yc:建立預編譯標頭檔案(pch) 
    /Yd:在所有的obj檔案裡寫上完全的除錯資訊 
    /Yu:在build過程中使用指定的預編譯標頭檔案 
    /YX:指示編譯器若預編譯標頭檔案存在,則使用它,若不存在,則建立一個 
    /Z7:生成MSC7.0相容的除錯資訊 
    /Za:禁止語言擴充套件(Microsoft Extensions to C) 
    /Zd:除錯資訊只包含外部和全域性的符號資訊以及行號資訊 
    /Ze:允許語言擴充套件(Microsoft Extensions to C) 
    /Zg:為原始檔裡面定義的每個函式生成函式原型 
    /ZI:生成程式庫檔案(Pdb)並支援Edit and Continue除錯特性 
    /Zi:生成程式庫檔案(pdb),包含型別資訊和符號除錯資訊 
    /ZL:從obj檔案裡去掉預設的庫檔名 
    /Zm:設定編譯器的記憶體分配xianzhi 
    /Zn:禁止瀏覽資訊檔案裡面的封裝 
    /Zp:設定結構成員在記憶體裡面的封裝格式 
    /Zs:快速檢查語法錯誤   
    一些小竅門


    1) 有時候,你可能在編譯的時候,計算機突然非法關機了(可能某人不小心碰了電源或你的記憶體不穩定等原因)。當你重啟機器後開啟剛才的專案,重新進行編譯,發現VC會崩掉。你或許以為你的VC編譯器壞了,其實不然(你試試編譯其它專案,還是好的!),你只要將專案的.ncb、.opt、.aps、.clw檔案以及Debug、Release目錄下的所有檔案都刪掉,然後重新編譯就行了。 

    2) 如果你想與別人共享你的原始碼專案,但是把整個專案做拷貝又太大。你完全可以刪掉以下檔案:.dsw、.ncb、.opt、.aps、.clw、. plg檔案以及Debug、Release目錄下的所有檔案。

    3) 當你的Workspace中包含多個Project的時候,你可能不能直觀地、一眼看出來哪個是當前專案。可以如下設定:Tools-> Options->Format,然後在Category中選擇Workspace window,改變其預設的字型(比如設成Fixedsys)就行了。

    4) 如何給已有的Project改名字?將該Project關掉。然後以文字格式開啟.dsp檔案,替換原來的Project名字即可。

    5) VC6對類成員的智慧提示功能很有用,但有時候會失靈。你可以先關掉專案,將.clw和.ncb刪掉,然後重新開啟專案,點選選單項View-> ClassWizard,在彈出的對話方塊中按一下"Add All"按鈕;重新Rebuild All。應該可以解決問題