理解句柄
句柄是一種指向指針的指針。我們知 道,所謂指針是一種內存地址。應用程序啟動后,組成這
個程序的各對象是住留在內存的。如果簡單地理解,似乎我們只要獲知這個內存的首地址,那么就可以隨時用這個地址 訪問對象。但是,如果您真的這樣認為,那么您就大錯特錯了。我們知道,Windows是一 個以虛擬內存為基礎的操作系統。在這種系統環境下,Windows內存管理器經常在內存中來回移動對象,依此來滿足各種應用程序的內存需要。對象被移動意味著它的地址變化 了。如果地址總是如此變化,我們該到哪里去找該對象呢?為了解決這個問題,Windows操作系統為各應用程序騰出一些內存儲地址,用來專門 登記各應用對象在內存中的地址變化,而這個地址(存儲單元的位置)本身是不變的。Windows內存管理器在移動對象在內存中的位置后,把對象新的地址告知這個句柄地址來保存。這樣我們只需記住這個句柄地址就可以間接地知道對象具體在內存中的哪個位置。這個地址是在對象裝載(Load)時由系統分配給的,當系統卸載時(Unload)又釋放給系統。句柄地址(穩定)→記載著對象在內存中的地址→對象在內存中的地址(不穩定)→實際對象。但是,必須注意的是程序每次從新啟動,系統不能保證分配給這個程序的句柄還是原來的那個句柄,而且絕大多數情況的確不一樣的。假如我們把進入電影院看電影看成 是一個應用程序的啟動運行,那么系統給應用程序分配的句柄總是不一樣,這和每次電 影院售給我們的門票總是不同的一個座位是一樣的道理。
from: http://blog.vckbase.com/arong/archive/2005/03/19/3732.html
個程序的各對象是住留在內存的。如果簡單地理解,似乎我們只要獲知這個內存的首地址,那么就可以隨時用這個地址 訪問對象。但是,如果您真的這樣認為,那么您就大錯特錯了。我們知道,Windows是一 個以虛擬內存為基礎的操作系統。在這種系統環境下,Windows內存管理器經常在內存中來回移動對象,依此來滿足各種應用程序的內存需要。對象被移動意味著它的地址變化 了。如果地址總是如此變化,我們該到哪里去找該對象呢?為了解決這個問題,Windows操作系統為各應用程序騰出一些內存儲地址,用來專門 登記各應用對象在內存中的地址變化,而這個地址(存儲單元的位置)本身是不變的。Windows內存管理器在移動對象在內存中的位置后,把對象新的地址告知這個句柄地址來保存。這樣我們只需記住這個句柄地址就可以間接地知道對象具體在內存中的哪個位置。這個地址是在對象裝載(Load)時由系統分配給的,當系統卸載時(Unload)又釋放給系統。句柄地址(穩定)→記載著對象在內存中的地址→對象在內存中的地址(不穩定)→實際對象。但是,必須注意的是程序每次從新啟動,系統不能保證分配給這個程序的句柄還是原來的那個句柄,而且絕大多數情況的確不一樣的。假如我們把進入電影院看電影看成 是一個應用程序的啟動運行,那么系統給應用程序分配的句柄總是不一樣,這和每次電 影院售給我們的門票總是不同的一個座位是一樣的道理。
from: http://blog.vckbase.com/arong/archive/2005/03/19/3732.html
posted on 2005-08-26 11:35 weidagang2046 閱讀(178) 評論(0) 編輯 收藏 所屬分類: Windows