執行乙個程式,必然就產生乙個程序(process)。最直接的程式執行方式就是在shell (如
win95 的檔案總管或windows 3.x 的檔案管理員)中以滑鼠雙擊某乙個可執行檔案圖示
createprocess
啟用的。
讓我們看看整個流程:
1. shell 呼叫
createprocess 啟用。
shell即命令直譯器,是作業系統引導時即載入的乙個系統程序,在windows任務管理器裡面可以看到乙個名為」explorer.exe」的程序,就是它了。
2. 系統產生乙個「
程序核心物件
」,計數值為1。
3. 系統為此程序建立乙個4gb 位址空間。
所需的動態聯結函式庫(dlls)。載入器如何知道要載入哪些dlls 呢?它
們被記錄在可執行檔案(pe 檔案格式)的
.idata section
中。5. 系統為此程序建立乙個執行執行緒,稱為
主執行執行緒
(primary thread)。執行執行緒才是
cpu 時間的分配物件。
6. 系統呼叫c runtime 函式庫的
startup code
。(c/c++ run-timestartupfunction。)
c/c++執行時庫有四個版本的啟動函式,他們分別對應不同型別的應用程式。比如,需要ansi字元和字串的gui應用程式的啟動函式是winmaincrtstartup,其對應的進入點函式是winmain,需要unicode字元和字串的gui應用程式的啟動函式是wwinmaincrtstartup,其對應
的進入點函式是wwinmain,而需要ansi字元和字串的cui應用程式(如控制台console程式)的應用程式的啟動函式是maincrtstartup,對應的入口點函式為main;需要unicode字元和字串的cui應用程式(如控制台console程式)的應用程式的啟動函式為wmaincrtstartup,對應的入口點函式為wmain;
啟動函式的功能可概括如下:
l 檢索指向新程序的完整命令列的指標
l 檢索指向新程序的環境變數的指標
l 對c/c++ run time's global variables進行初始化。如果包含了stdlib.h標頭檔案,你的**就能訪問這些變數。詳見下表:
l 對c執行期記憶體分配函式(mallco和calloc)以及low-level input/output routines使用的heap(堆)進行初始化
l 為所有的全域性和靜態c++類物件呼叫建構函式
當上述這些初始化操作完成後,c/c++ run-time startup function就呼叫應用程式的進入點函式。
>
winmain
函式。
如果編寫了乙個winmain函式,它將以如下的形式被呼叫:
getstartupinfo( &startupinfo );
int nmainretval = winmain( getmodulehandle(null), null, pszcommandlineansi,
(startupinfo.dwflags & startf_useshowwindow)
? startupinfo.wshowwindow : sw_showdefault );
10. 回到startup code。
當進入點函式返回時,啟動函式便呼叫c執行期的exit函式,將返回值(nmainretval)傳遞給它。
exit函式負責如下操作:
l呼叫由_onexit函式的呼叫而註冊的任何函式
l 為所有全域性的和靜態的c++類物件呼叫析構函式
l呼叫作業系統的exitprocess函式,將nmainretval傳遞給它。這使得作業系統能夠撤銷此程序並設定它的exit code(該**儲存在該程序對應的核心物件中)。
11. 回到系統,系統呼叫exitprocess 結束程序。
執行庫在呼叫使用者程式的main或winmain函式之前,進行了一些初始化工作。初始化完成後,接著才呼叫了我們自己編寫的main或winmain函式。這樣, c/c++執行時庫和應用程式就正常地工作起來了。
當使用者程式的main或winmain函式執行結束後,返回值被當做引數傳入exit函式中,有exit完成程式執行的收尾工作,包括析構c++全域性和靜態類,呼叫作業系統的exitprocess函式,告知程序退出等。
windows下QT打包exe程式
本來打算自己做一遍 然後一步步的寫下來的,但是bug不斷,好傢伙,直接變成了和你們一樣開始在csdn上遊蕩開始找答案了,終於,皇天不負有心人,終於找到了 說的好像是自己想出來解決辦法一樣,tui,男人,大概有3種針對不同的情況的解決辦法,總結 1 出現0xc000007b 應用程式無法正常啟動 其根...
windows下python程式開機自啟動
開機自啟動有三種方案 1 把你的python程式隨便放到c盤的乙個目錄下,然後把它的快捷方式放到windows開機自啟動的資料夾 資料夾的位置在開始選單裡有 2 python打包成exe,放到啟動資料夾 3 start.c打包成exe,讓start.c呼叫你的python程式 start.c inc...
windows 下 MongoDB 的安裝與啟動
我的安裝目錄是d mongodb,下面的引數設定以這個為準,你們改為自已對應的即可 我的電腦 右鍵 屬性 高階系統設定 環境變數 使用者變數或系統變數中找到 path 雙擊 在變數值的最後加上 d mongodb bin 別漏了分號,分號用於分隔上乙個變數這兩個資料夾可以建立在任意位置,不一定要在安...