句柄數

句柄是WONDOWS用來標識被應用程式所建立或使用的對象的唯一整數,WINDOWS使用各種各樣的句柄標識諸如應用程式實例,視窗,控制,點陣圖,GDI對象等等。WINDOWS句柄有點象C語言中的檔案句柄。

定義

從上面的定義中的我們可以看到,句柄是一個標識符,是拿來標識對象或者項目的,它就象我們的姓名一樣,每個人都會有一個,不同的人的姓名不一樣,但是,也可能有一個名字和你一樣的人。從數據類型上來看它只是一個16位的無符號整數。應用程式幾乎總是通過調用一個WINDOWS函式來獲得一個句柄,之後其他的WINDOWS函式就可以使用該句柄,以引用相應的對象。
如果想更透徹一點地認識句柄,我可以告訴大家,句柄是一種指向指針的指針。我們知道,所謂指針是一種記憶體地址。應用程式啟動後,組成這個程式的各對象是住留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首地址,那么就可以隨時用這個地址訪問對象。但是,如果您真的這樣認為,那么您就大錯特錯了。我們知道,Windows是一個以虛擬記憶體為基礎的作業系統。在這種系統環境下,Windows記憶體管理器經常在記憶體中來回移動對象,依此來滿足各種應用程式的記憶體需要。對象被移動意味著它的地址變化了。如果地址總是如此變化,我們該到哪裡去找該對象呢?
為了解決這個問題,Windows作業系統為各應用程式騰出一些記憶體儲地址,用來專門登記各套用對象在記憶體中的地址變化,而這個地址(存儲單元的位置)本身是不變的。Windows記憶體管理器在移動對象在記憶體中的位置後,把對象新的地址告知這個句柄地址來保存。這樣我們只需記住這個句柄地址就可以間接地知道對象具體在記憶體中的哪個位置。這個地址是在對象裝載(Load)時由系統分配給的,當系統卸載時(Unload)又釋放給系統。
句柄地址(穩定)→記載著對象在記憶體中的地址────→對象在記憶體中的地址(不穩定)→實際對象

本質

WINDOWS程式中並不是用物理地址來標識一個記憶體塊,檔案,任務或動態裝入模組的,相反的,Windows API給這些項目分配確定的句柄,並將句柄返回給應用程式,然後通過句柄來進行操作。
但是必須注意的是程式每次從新啟動,系統不能保證分配給這個程式的句柄還是原來的那個句柄,而且絕大多數情況的確不一樣的。假如我們把進入電影院看電影看成是一個應用程式的啟動運行,那么系統給應用程式分配的句柄總是不一樣,這和每次電影院售給我們的門票總是不同的一個座位是一樣的道理。

相關詞條

相關搜尋

熱門詞條

聯絡我們