專家剖析VS2003編譯成果
VS2003編譯表示不使用微軟為標(biāo)準(zhǔn)C做的語(yǔ)言擴(kuò)展;Eliminate Duplicate Strings,主要用于字符串優(yōu)化(將字符串放到緩充池里以節(jié)省空間),使用這個(gè)參數(shù),使得一些技術(shù)人員為之煩惱。
1) General:一些總體設(shè)置。Warning level用來(lái)控制警告信息,其中Level 1是最嚴(yán)重的級(jí)別;Warnings as errors將警告信息當(dāng)作錯(cuò)誤處理;Optimizations是代碼優(yōu)化,可以在Category的Optimizations項(xiàng)中進(jìn)行更細(xì)的設(shè)置;VS2003編譯用以生成.sbr文件,記錄類、變量等符號(hào)信息,可以在Category的Listing Files項(xiàng)中進(jìn)行更多的設(shè)置。Debug info,生成調(diào)試信息:None,不產(chǎn)生任何調(diào)試信息(編譯比較快);Line Numbers Only,僅生成全局的和外部符號(hào)的調(diào)試信息到.OBJ文件或.EXE文件,減小目標(biāo)文件的尺寸;C 7.0- Compatible,記錄調(diào)試器用到的所有符號(hào)信息到.OBJ文件和.EXE文件;Program Database,創(chuàng)建.PDB文件記錄所有調(diào)試信息;Program Database for "Edit & Continue",創(chuàng)建.PDB文件記錄所有調(diào)試信息,并且支持調(diào)試時(shí)編輯。#t#
2) C++ Language:pointer_to_member representation用來(lái)設(shè)置類定義/引用的先后關(guān)系,一般為VS2003編譯表示在引用類之前該類肯定已經(jīng)定義了;Enable Exception Handling,進(jìn)行同步的異常處理;Enable Run-Time Type Information迫使編譯器增加代碼在運(yùn)行時(shí)進(jìn)行對(duì)象類型檢查;Disable Construction Displacements,設(shè)置類構(gòu)造/析構(gòu)函數(shù)調(diào)用虛函數(shù)問(wèn)題。
3) Code Generation:Processor表示代碼指令優(yōu)化,可以為80386、80486、Pentium、Pentium Pro,或者Blend表示混合以上各種優(yōu)化。Use run-time library用以指定程序運(yùn)行時(shí)使用的運(yùn)行時(shí)庫(kù)(單線程或多線程,Debug版本或Release版本),有一個(gè)原則就是,一個(gè)進(jìn)程不要同時(shí)使用幾個(gè)版本的運(yùn)行時(shí)庫(kù)。Single-Threaded,靜態(tài)連接LIBC.LIB庫(kù);Debug Single-Threaded,靜態(tài)連接LIBCD.LIB庫(kù);Multithreaded,靜態(tài)連接LIBCMT.LIB庫(kù);Debug Multithreaded,靜態(tài)連接LIBCMTD.LIB庫(kù);Multithreaded DLL,動(dòng)態(tài)連接MSVCRT.DLL庫(kù);Debug Multithreaded DLL,動(dòng)態(tài)連接MSVCRTD.DLL庫(kù)。VS2003編譯連接了單線程庫(kù)就不支持多線程調(diào)用,連接了多線程庫(kù)就要求創(chuàng)建多線程的應(yīng)用程序。#t#
VS2003編譯可以用來(lái)設(shè)定調(diào)用約定,有三種:__cdecl、__fastcall和__stdcall。各種調(diào)用約定的主要區(qū)別在于,函數(shù)調(diào)用時(shí),函數(shù)的參數(shù)是從左到右壓入堆棧還是從右到左壓入堆棧;在函數(shù)返回時(shí),由函數(shù)的調(diào)用者來(lái)清理壓入堆棧的參數(shù)還是由函數(shù)本身來(lái)清理;以及在編譯時(shí)對(duì)函數(shù)名進(jìn)行的命名修飾(可以通過(guò)Listing Files看到各種命名修飾方式)。Struct member alignment用以指定數(shù)據(jù)結(jié)構(gòu)中的成員變量在內(nèi)存中是按幾字節(jié)對(duì)齊的,根據(jù)計(jì)算機(jī)數(shù)據(jù)總線的位數(shù),不同的對(duì)齊方式存取數(shù)據(jù)的速度不一樣。這個(gè)參數(shù)對(duì)數(shù)據(jù)包網(wǎng)絡(luò)傳輸?shù)葢?yīng)用尤為重要,不是存取速度問(wèn)題,而是數(shù)據(jù)位的精確定義問(wèn)題,一般在程序中使用#pragma pack來(lái)指定。