C++中的C++堆棧淺析
想要學(xué)好C++的C++堆棧,那么就要了解什么是C++堆棧,所為C++堆棧就是一種數(shù)據(jù)項(xiàng)按序排列的數(shù)據(jù)結(jié)構(gòu),只能在一端(稱為棧頂(top))對數(shù)據(jù)項(xiàng)進(jìn)行插入和刪除,分為堆和棧兩部分。
在C++中,內(nèi)存分成5個(gè)區(qū),他們分別是堆、棧、自由存儲區(qū)、全局/靜態(tài)存儲區(qū)和常量存儲區(qū)。棧,就是那些由編譯器在需要的時(shí)候分配,在不需要的時(shí)候自動(dòng)清楚的變量的存儲區(qū)。里面的變量通常是局部變量、函數(shù)參數(shù)等。
堆,就是那些由new分配的內(nèi)存塊,他們的釋放編譯器不去管,由我們的應(yīng)用程序去控制,一般一個(gè)new就要對應(yīng)一個(gè)delete。如果程序員沒有釋放掉,那么在程序結(jié)束后,操作系統(tǒng)會自動(dòng)回收。自由存儲區(qū),就是那些由malloc等分配的內(nèi)存塊,他和堆是十分相似的,不過它是用free來結(jié)束自己的生命的。
全局/靜態(tài)存儲區(qū),全局變量和靜態(tài)變量被分配到同一塊內(nèi)存中,在以前的C++堆棧中,全局變量又分為初始化的和未初始化的,在C++里面沒有這個(gè)區(qū)分了,他們共同占用同一塊內(nèi)存區(qū)。常量存儲區(qū),這是一塊比較特殊的存儲區(qū),他們里面存放的是常量,不允許修改(當(dāng)然,你要通過非正當(dāng)手段也可以修改,而且方法很多)
Windows服務(wù)被設(shè)計(jì)用于需要在后臺運(yùn)行的應(yīng)用程序以及實(shí)現(xiàn)沒有用戶交互的任務(wù)。為了學(xué)習(xí)這種控制臺應(yīng)用程序的基礎(chǔ)知識,C(不是C++)是***選擇。本文將建立并實(shí)現(xiàn)一個(gè)簡單的服務(wù)程序。
其功能是查詢系統(tǒng)中可用物理內(nèi)存數(shù)量,然后將結(jié)果寫入一個(gè)文本文件。***,你可以用所學(xué)知識編寫自己的 Windows 服務(wù)。當(dāng)初我寫***個(gè) NT 服務(wù)時(shí),我到 MSDN 上找例子。在那里我找到了一篇 Nigel Thompson 寫的文章:“Creating a Simple Win32 Service in C++”,這篇文章附帶一個(gè) C++ 例子。
雖然這篇文章很好地解釋了服務(wù)的開發(fā)過程,但是,我仍然感覺缺少我需要的重要信息。我想理解通過什么框架,調(diào)用什么函數(shù),以及何時(shí)調(diào)用,但 C++ 在這方面沒有讓我輕松多少。
面向?qū)ο蟮姆椒ü倘环奖?,但由于用類對底?Win32 函數(shù)調(diào)用進(jìn)行了封裝,它不利于學(xué)習(xí)服務(wù)程序的基本知識。這就是為什么我覺得 C 更加適合于編寫初級服務(wù)程序或者實(shí)現(xiàn)簡單后臺任務(wù)的服務(wù)。在你對服務(wù)程序有了充分透徹的理解之后,用 C++堆棧編寫才能游刃有余。
當(dāng)我離開原來的工作崗位,不得不向另一個(gè)人轉(zhuǎn)移我的知識的時(shí)候,利用我用 C 所寫的例子就非常容易解釋 NT 服務(wù)之所以然。服務(wù)是一個(gè)運(yùn)行在后臺并實(shí)現(xiàn)勿需用戶交互的任務(wù)的控制臺程序。Windows NT/2000/XP 操作系統(tǒng)提供為服務(wù)程序提供專門的支持。
人們可以用服務(wù)控制面板來配置安裝好的服務(wù)程序,也就是 Windows 2000/XP 控制面板|管理工具中的“服務(wù)”(或在“開始”|“運(yùn)行”對話框中輸入 services.msc /s——譯者注)??梢詫⒎?wù)配置成操作系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟動(dòng),這樣你就不必每次再重啟系統(tǒng)后還要手動(dòng)啟動(dòng)服務(wù)。
【編輯推薦】