在這以前先了解一個概念:解決方案與工程。
解決方案(Solution):一個大型項目的總體的工做環境;
工程 (Project):一個解決方案下的一個子工程;html
在VS中,一個Solution能夠有一個或多個Project。在咱們建立一個工程時,若是沒有指定Solution,VS會幫咱們建立一個與工程名相同的Solution,這時一個Solution裏只有一個Project。全部在咱們的TestProject的文件目錄結構中TestProject文件夾下還有一個TestProject文件夾(如圖4),第一個就是整個Solution的目錄,第二個纔是Project的目錄。c++
TestProject.sln:
整個解決方案(Solution)的配製文件,組織多個工程和相關的元素到一個解決方案中。用鼠標雙擊它就能用VS打開整個工程項目。git
TestProject.sdf:
瀏覽相關的數據庫文件,它支持瀏覽和導航的特性。如跳轉到方法、變量的聲明,查找全部對象的全部被引用的地方,類視圖等等。github
TestProject.suo:
(solution user opertion) 解決方案用戶選項,記錄全部將與解決方案創建關聯的選項, 以便在每次打開時,它都包含您所作的自定義設置.數據庫
TestProject.opensdf:
打開解決方案(Solution)時的臨時文件,這個文件只有你的解決方案在VS打開的狀態纔會有,工程一關閉文件就被刪除了。編程
TestProject.vcxproj:
記錄工程(Project)相關的屬性配製。windows
TestProject.vcxproj.filters:
文件過慮器,上圖3「工程結構」中各個文件的組織和編排都是定義在這個文件中的。若是因爲某種特殊的緣由(如系統或VS忽然崩潰)致使你打開工程時文件的組織結構是亂的,100%就是這個文件的緣由。服務器
TestProject.vcxproj.user:
用戶相關的一些配製。網絡
上面這些文件中有幾個比較重要的必定不能刪的文件是:多線程
TestProject.sln、TestProject.vcxproj、TestProject.vcxproj.filters
不要問我是怎樣知道這些文件的做用的,請看官方文檔:
VS2010定義:https://msdn.microsoft.com/en-us/library/3awe4781.aspx.
VS2015定義:https://msdn.microsoft.com/en-us/library/vstudio/hx0cxhaw(v=vs.110).aspx
COM(Component Object Model)組件對象模型是microsoft制定的一個組件軟件標準,跟unix上的CORBA同樣。凡是遵循COM標準開發出來的組件稱爲COM組件。目地是實現二進制方式的軟件重用 。在windows平臺上,COM的實現形式有DLL(進程內組件)和EXE(進程外組件)2種。
OLE(Object Linking and Embedding)對象鏈接與嵌入是微軟的複合文檔技術,可方便實現應用程序之間的通訊。在後來的OLE2中才導入了 COM,提供了對COM的支持,利用這種技術可開發可重複使用的軟件組件COM。OLE是軟件比較早提出的一種技術。
ATL(Active Template Library)活動模板庫是一套C++模板庫,經常使用於開發COM程序和ActiveX程序。要理解ATL技術可從如下兩方面理解:
ATL因其採用了特定的基本實現技術,擺脫了大量冗餘代碼,使用ATL開發出來的COM應用的代碼簡練高效。
在ATL產生之前,開發COM組件的方法主要有兩種:一是使用COM SDK(COM軟件開發包)直接開發COM組件,另外一種方式是經過MFC提供的COM支持來實現。而如今 ATL已經成爲Microsoft支持COM應用開發的主要開發工具。
MFC(Microsoft Foundation Classes)微軟基礎類是微軟提供的一個用於Windows程序開發的基礎類庫。MFC以C++類的形式封裝了Windows的API,而且包含一個應用程序框架,以減小應用程序開發人員的工做量。其中包含的類包含大量Windows句柄封裝類和不少Windows的內建控件和組件的封裝類。
ActiveX是微軟提出的一組使用COM技術使得軟件組件在網絡環境中進行交互的技術集,它與具體的編程語言無關。做爲針對Internet應用開發的技術,ActiveX被普遍應用於WEB服務器以及客戶端的各個方面。同時,ActiveX技術也被用於方便地建立普通的桌面應用程序,此外ActiveX通常具備界面。
ActiveX既包含服務器端技術,也包含客戶端技術。其主要內容是:
使用Visual Assist X
h: 頭文件 cpp: 源文件 txt: 說明文件,如readme rc: 資源文件 rc2: 資源文件 ico: 圖標,如logo等 sln: 解決方案工程文件 vcxproj: 工程文件 filters: 文件過慮器
Debug、Release等編譯結構目錄 ipch目錄 aps: last resource editor state exe: build result idb: build state ipch: build helper lastbuildstate: build helper lib: build result. Can be 3rd party log: build log manifest: build helper. Can be written yourself. obj: build helper pch: build helper pdb: build result res: build helper sdf: intellisense dbase suo: solution user options tlog: build log user: debug settings. Do preserve if just one dev or custom debug settings
若是用TortoiseSVN進行管理,須要手動添加ignore屬性將不須要上傳的文件忽略掉。在你工程目錄裏,右鍵->TortoiseSVN->Properties->New->Other,彈出的對話框中Property name中選擇svn:ignore,Property value中填入要忽略的內容(這裏可使用能配符)。能夠設置全局忽略樣式。
Multi-threaded /MT Release版的多線程靜態庫 libcmt.lib Multi-threaded Debug /MTd Debug版的多線程靜態庫 libcmtd.lib Multi-threaded DLL /MD Release版的多線程動態庫 msvcrt.lib+msvcrtxx.dll Multi-threaded DLL Debug MDd Debug版的多線程動態庫 msvcrtd.lib+msvcrtxxd.dll
結論:/MD和/MDd將是潮流所趨,/ML和/MLd方式請及時放棄,/MT和/MTd在非必要時最好也不要採用了。
VS中的路徑宏 vc++中OutDir、ProjectDir、SolutionDir各類路徑
打開安裝目錄下的VSDIR\VC\bin能夠看到一系列的可執行程序.exe和批處理文件,這些就是VS2010構建、編譯、連接時要用到的工具。看一下幾個主要的工具:
cl.exe:編譯程序 link.exe:連接程序 lib.exe:加載lib庫的程序 nmake.exe:用makefile進行構建、編譯的工具
使用VS的性能分析工具
打開一個「性能分析」的會話:Debug->Start Diagnotic Tools Without Debugging(或按Alt+F2),VS2013在Analysis菜單中。
檢測CPU的性能,主要用於發現影響CPU瓶頸(消耗大量CPU資源)的代碼。
檢測GPU的性能,經常使用於圖形引擎的應用(如DirectX程序),主要用於判斷是CPU仍是GPU的瓶頸。
檢測應用程序的內存,發現內存。
性能(監測)嚮導,綜合檢測程序的性能瓶頸。這個比較經常使用,下面再逐一說明。
進行採樣統計,以低開銷水平監視佔用大量CPU的應用程序。這個對於計算量大的程序可大大節省監控時間。
徹底統計,測量函數調用計數和用時
跟蹤託管內存分配。這個好像只有託管代碼(如C#)纔可用,通常以C++代碼好像不行。
檢測等待其餘線程的線程,多用於多線程的併發。
有幾個不一樣的視圖可供咱們切換,下面加粗的部分是我的以爲比較方便和經常使用的視圖。
函數的調用約定,顧名思義就是對函數調用的一個約束和規定(規範),描述了函數參數是怎麼傳遞和由誰清除堆棧的。它決定如下內容:(1)函數參數的壓棧順序,(2)由調用者仍是被調用者把參數彈出棧,(3)以及產生函數修飾名的方法。
常見的調用約定有__cdecl、__stdcall、fastcall,應用最普遍的是__cdecl和__stdcall,下面咱們會詳細進行講述。。還有一些不常見的,如 __pascal、__thiscall、__vectorcall。
__cdecl 是 C Declaration 的縮寫,表示 C 和 C++ 默認的函數調用約定。是C/C++和MFCX的默認調用約定。
__stdcall是Standard Call的縮寫,是C++的標準調用方式,固然這是微軟定義的標準,__stdcall一般用於Win32 API中(可查看WINAPI的定義)。
__fastcall調用的主要特色就是快,由於它是經過寄存器來傳送參數的。
__thiscall是C++類成員函數缺省的調用約定,但它沒有顯示的聲明形式。由於在C++類中,成員函數調用還有一個this指針參數,所以必須特殊處理,thiscall調用約定的特色:
參考: