指針與句柄的區(qū)別

最近兩天在復(fù)習(xí)一些c++的知識,中間發(fā)現(xiàn)了許多以前沒有注意過的問題。關(guān)于句柄以前總是將其理解為指針,其實不然,他們之間有著明顯的區(qū)別。

首先,指針指向系統(tǒng)中物理內(nèi)存的地址,而句柄是windows在內(nèi)存中維護的一個對象內(nèi)存物理地址列表的整數(shù)索引,句柄是一種指向指針的指針。

在windows系統(tǒng)中的內(nèi)存管理一般會將當(dāng)前處于空閑狀態(tài)的對象的內(nèi)存釋放掉,當(dāng)需要訪問的時候再重新提交分配物理內(nèi)存,從而導(dǎo)致對象的物理地址是變化的,

這樣就不允許系統(tǒng)直接通過指針來訪問(物理地址不斷變化)的對象。

句柄是一種指向指針的指針。由于windows是一種以虛擬內(nèi)存為基礎(chǔ)的操作系統(tǒng),其內(nèi)存管理器經(jīng)常會在內(nèi)存中來回的移動對象,以此來滿足各種應(yīng)用程序?qū)?nèi)存的需求。

而對象的移動意味著對象內(nèi)存地址的變化,正是因為如此,如果直接使用指針,在內(nèi)存地址被改變后,系統(tǒng)將不知道到哪里去再調(diào)用這個對象。

windows系統(tǒng)為論文解決這個問題,系統(tǒng)專門為各種應(yīng)用程序騰出了一定的內(nèi)存地址(句柄)專門用來記錄這些變化的地址(這些內(nèi)存地址就是指向指針的指針),這些內(nèi)存地址本身是一直不變化的。windows內(nèi)存管理器在移動某些對象之后,他會將這些對象新的內(nèi)存地址傳給句柄,告訴他移動后對象去了哪里。

句柄(穩(wěn)定的)----->記載著對象在內(nèi)存中的地址---->對象在內(nèi)存中的地址(不穩(wěn)定的)---->記載著實際對象的地址。

圖中實線表示初始化的情況,虛線表示在內(nèi)存管理器處理之后的情況

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容