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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows句柄-2

發布時間:2023/12/18 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows句柄-2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里需要說明:

1.這里將句柄所能標識的所有東西(如窗口、文件、畫筆等)統稱為“對象”。

2.圖中一個小橫框表示一定大小的內存區域,并不代表一個字節,如標有0X00000AC6的橫框表示4個字節。

3.圖解的目的是為了直觀易懂,所以不一定與源碼完全對應,會有一定的簡化。

讓我們先看圖,再解釋。

其中,圖1是程序運行到某時刻時的內存快照,圖2是程序往后運行到另一時刻時的內存快照。紅色部分標出了兩次的變化。

簡單解釋:

Windows是一個以虛擬內存為基礎的操作系統,很多時候,進程的代碼和數據并不全部裝入內存,進程的某一段裝入內存后,還可能被換出到外存,當再次需要時,再裝入內存。兩次裝入的地址絕大多數情況下是不一樣的。也就是說,同一對象在內存中的地址會變化。(對于虛擬內存不是很了解的讀者,可以參考有關操作系統方面的書籍)那么,程序怎么才能準確地訪問到對象呢?為了解決這個問題,Windows引入了句柄。

系統為每個進程在內存中分配一定的區域,用來存放各個句柄,即一個個32位無符號整型值(32位操作系統中)。每個32位無符號整型值相當于一個指針,指向內存中的另一個區域(我們不妨稱之為區域A)。而區域A中存放的正是對象在內存中的地址。當對象在內存中的位置發生變化時,區域A的值被更新,變為當前時刻對象在內存中的地址,而在這個過程中,區域A的位置以及對應句柄的值是不發生變化的。這種機制,用一種形象的說法可以表述為:有一個固定的地址(句柄),指向一個固定的位置(區域A),而區域A中的值可以動態地變化,它時刻記錄著當前時刻對象在內存中的地址。這樣,無論對象的位置在內存中如何變化,只要我們掌握了句柄的值,就可以找到區域A,進而找到該對象。而句柄的值在程序本次運行期間是絕對不變的,我們(即系統)當然可以掌握它。這就是以不變應萬變,按圖索驥,順藤摸瓜。

所以,我們可以這樣理解Windows句柄:

數值上,是一個32位無符號整型值(32位系統下);邏輯上,相當于指針的指針;形象理解上,是Windows中各個對象的一個唯一的、固定不變的ID;作用上,Windows使用句柄來標識諸如窗口、位圖、畫筆等對象,并通過句柄找到這些對象。

下面,關于句柄,再交代一些關鍵性細節:

1.所謂“唯一”、“不變”是指在程序的一次運行中。如果本次運行完,關閉程序,再次啟動程序運行,那么這次運行中,同一對象的句柄的值和上次運行時比較,一般是不一樣的。

其實這理解起來也很自然,所謂“一把歸一把,這把是這把,那把是那把,兩者不相干”(“把”是形象的說法,就像打牌一樣,這里指程序的一次運行)。

2.句柄是對象生成時系統指定的,屬性是只讀的,程序員不能修改句柄。

3.不同的系統中,句柄的大小(字節數)是不同的,可以使用sizeof()來計算句柄的大小。

4.通過句柄,程序員只能調用系統提供的服務(即API調用),不能像使用指針那樣,做其它的事。

參考:數據結構與算法

究竟什么是Windows句柄 - whatgorun - 博客園

總結

以上是生活随笔為你收集整理的Windows句柄-2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。