日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

什么是句柄?指针和句柄的区别

發(fā)布時(shí)間:2024/8/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是句柄?指针和句柄的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? 句柄在windows編程中是一個(gè)很重要的概念,在許多地方都扮演著重要的角色。在windows環(huán)境中,句柄是用來(lái)標(biāo)識(shí)項(xiàng)目的,這些項(xiàng)目包括:

(1)模塊(module)

(2)任務(wù)(task)

(3)實(shí)例(instance)

(4)文件(file)

(5)內(nèi)存塊(block of memory)

(6)菜單(menu)

(7)控制(control)

(8)字體(font)

(9)資源(recource),包括圖標(biāo)(icon),光標(biāo)(cursor),字符串(string)等

(10)GDI對(duì)象(GDI object),包括位圖(bitmap),畫刷(brush),元文件(metafile),調(diào)色板(palette),畫筆(pen),區(qū)域(region),以及設(shè)備描述表(device context)

? ? Windows是一個(gè)以虛擬內(nèi)存為基礎(chǔ)的操作系統(tǒng),在這種環(huán)境下,Windows內(nèi)存管理器經(jīng)常在內(nèi)存中來(lái)回移動(dòng)對(duì)象,以此來(lái)滿足各種應(yīng)用程序的需要。對(duì)象被移動(dòng)意味著它的地址變化了。由于地址總是如此變化,所以Windows操作系統(tǒng)為各應(yīng)用程序騰出一些內(nèi)存地址,用來(lái)專門登記各應(yīng)用對(duì)象在內(nèi)存中的地址變化,而這地址(存儲(chǔ)單元的位置)本身是不變的。Windows內(nèi)存管理器在移動(dòng)對(duì)象在內(nèi)存中的位置后,把對(duì)象新的地址告知這個(gè)句柄地址來(lái)保存。這樣我們只需記住這個(gè)句柄地址就可以間接地知道對(duì)象具體在內(nèi)存中的哪個(gè)位置。這個(gè)地址是在對(duì)象裝載(Load)時(shí)由系統(tǒng)分配給的,當(dāng)系統(tǒng)卸載時(shí)(Unload)又釋放給系統(tǒng)。

? ?因此,Windows程序中并不是用物理地址來(lái)標(biāo)識(shí)一個(gè)內(nèi)存塊,文件,任務(wù),或動(dòng)態(tài)裝入模塊的,相反,WINDOWS API給這些項(xiàng)目分配確定的句柄,并將句柄返回給應(yīng)用程序,然后通過(guò)句柄來(lái)進(jìn)行操作。

? ?在Windows編程中會(huì)用到大量的句柄,比如HINSTANCE(實(shí)例句柄),HBITMAP(位圖句柄),HDC(設(shè)備表述句柄),HICON(圖標(biāo)句柄)等。這當(dāng)中還有一個(gè)通用的句柄,就是HANDLE,比如下面的語(yǔ)句:

1 HINSTANCE hInstance ;

2 HANDLE?hInstance ;

? 句柄地址(穩(wěn)定)->記載著對(duì)象在內(nèi)存中的地址->對(duì)象在內(nèi)存中的地址(不穩(wěn)定)->實(shí)際對(duì)象。但是,必須注意注意的是,程序每次重新啟動(dòng),系統(tǒng)不能保證分配給這個(gè)程序的句柄還是原來(lái)的那個(gè)句柄,而且絕大多數(shù)情況的確是不一樣的。


? ?而指針對(duì)應(yīng)著一個(gè)數(shù)據(jù)在內(nèi)存中的地址,得到了指針就可以自由地修改數(shù)據(jù)。Windows并不希望一般程序修改其內(nèi)部數(shù)據(jù)結(jié)構(gòu),因?yàn)檫@樣太不安全。所以Windows給每個(gè)使用GlobalAlloc等函數(shù)聲明的內(nèi)存區(qū)域指定一個(gè)句柄,句柄是一種指向指針的指針。

? 句柄和指針都是地址,不同之處在于:

(1)句柄所指的可以是一個(gè)很復(fù)雜的結(jié)構(gòu),并且很有可能是與系統(tǒng)相關(guān)的,比如說(shuō)線程的句柄,它指向的就是一個(gè)類或者結(jié)構(gòu),它和系統(tǒng)有很密切的關(guān)系。當(dāng)一個(gè)線程由于不可預(yù)料的原因而終止時(shí),系統(tǒng)就可以返回它所占用的的資料,如CPU ,內(nèi)存等。反過(guò)來(lái)想可以知道,這個(gè)句柄中的某一些項(xiàng)是與系統(tǒng)進(jìn)行交互的。由于Windows系統(tǒng)是一個(gè)多任務(wù)的系統(tǒng),它隨時(shí)都可能要分配內(nèi)存,回收內(nèi)存,重組內(nèi)存。

(2)指針也可以指向一個(gè)復(fù)雜的結(jié)構(gòu),但是通常是用戶定義的,所以必須的工作都要用戶完成,特別是在刪除的時(shí)候。

總結(jié)

以上是生活随笔為你收集整理的什么是句柄?指针和句柄的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。