標籤:io ar os 使用 sp strong 檔案 資料 on
1.進程組成
- 一個核心對象,作業系統用它來管理進程。
- 一個地址空間,其中包含所有可執行檔或DLL模組的代碼和資料。此外,它還包含動態記憶體分配,比如線程堆棧和堆的分配。
2.一個進程可以有多個線程,所有線程都在進程的地址空間中“同時”執行代碼。每個進程至少要有一個線程來執行進程地址空間包含的代碼。
3.用Microsoft Visual Studio來建立一個應用程式項目時,集開發環境會設定各種連結器開關,使連結器將子系統的正確類型嵌入最終產生的可執行檔。對於CUI程式,這個連結器開關是/SUBSYSTEM:CONSOLE,對於GUI程式,則是/SUBSYSTEM:WINDOWS
4.應用程式類型和相應的進入點函數
| 應用程式類型 |
進入點函數(入口) |
嵌入可執行檔的啟動函數 |
| 處理ANSI字元和字串的GUI應用程式 |
_tWinMain(WinMain) |
WinMainCRTStartup |
| 處理Unicode字元和字串的GUI應用程式 |
_tWinMain(wWinMain) |
wWinMainCRTStartup |
| 處理ANSI字元和字串的CUI應用程式 |
_tmain(Main) |
mainCRTStartup |
| 處理Unicode字元和字串的CUI應用程式 |
_tmain(Wmain) |
wmainCRTStartup |
5.啟動函數的用途
- 擷取指向新進程的完整命令列的一個指標
- 擷取指向新進程的環境變數的一個指標
- 初始化C/C++運行庫的全域變數。如果包含了StdLib.h,我們的代碼就可以訪問這些變數
- 初始化C運行庫記憶體配置函數(malloc和calloc)和其他底層I/O常式使用的堆(heap)
- 調用所有全域和靜態C++類對象的建構函式
6.載入到進程地址空間的每一個可執行檔或者DLL檔案都賦予了一個獨一無二的執行個體控制代碼。可執行檔的執行個體被當作(w)WinMain函數的第一個參數hInstanceExe傳入。(w)WinMain的hInstanceExe參數的實際值是一個記憶體基地址:系統將可執行檔的映像載入到進城地址空間的這個位置。
7.HMODULE和HINSTANCE完全是一回事。
8.
Windows核心編程讀書筆記-第四章進程