windows程序設計(一)對句柄的認識

總概述 句柄,是整個Windows編程的基礎。一個句柄是指使用的一個唯一的整數值,即一個4字節(64位程序中爲8字節)長的數值,來標識應用程序中的不同對象和同類對象中的不同的實例,諸如,一個窗口,按鈕,圖標,滾動條,輸出設備,控件或者文件等。應用程序能夠通過句柄訪問相應的對象的信息,但是句柄不是一個指針,程序不能利用句柄來直接閱讀文件中的信息。如果句柄不在I/O文件中,它是毫無用處的。 句柄是Windows用來標誌應用程序中建立的或是使用的唯一整數,window使用了大量的句柄來標識很多對象。

由來

windows 之所以要設立句柄,根本上源於內存管理機制的問題—虛擬地址,簡而言之數據的地址需要變動,變動以後就需要有人來記錄管理變動,(就好像戶籍管理一樣),因此係統用句柄來記載數據地址的變更。

數據對象加載進入內存中之後即獲得了地址,但是這個地址並不是固定的,(至於爲什麼以及什麼情況下變動具體需要大家研究虛擬地址的原理與機制我這裏只提我確定知道的例子)數據對象會根據需要在內存與硬盤之間遊弋移動(例如不常用的數據會爲常用數據讓出其佔用的內存空間進而被淘汰進硬盤中的虛擬內存之中以優化配置整體系統的資源進而提升效率性能),因此其物理地址總是變動的,那麼作爲管理者 則必須對 管理對象所發生的變化瞭如指掌才行,因此係統爲進程分配固定的地址(句柄)來存儲進程下的數據對象變化後的地址也就是當前的地址,其實設計機制很簡單 :系統的某個部門移動了對象的地址後,同時上報給句柄所屬部門管理者,管理者將改動寫入句柄即可。該數據被重新起用時去其所屬句柄內按內容存取即可。

句柄,英文:HANDLE,在Windows編程中是一個很重要的概念,在許多地方都扮演着重要的角色。但由此而產生的句柄概念也大同小異,比如:《Microsoft Windows 3 Developer's Workshop》(Microsoft Press,by Richard Wilton)一書中句柄的概念是:在Windows環境中,句柄是用來標識項目的。

在程序設計中,句柄是一種特殊的智能指針 。當一個應用程序要引用其他系統(如數據庫、操作系統)所管理的內存塊或對象時,就要使用句柄。

句柄與普通指針的區別在於,指針包含的是引用對象的內存地址,而句柄則是由系統所管理的引用標識,該標識可以被系統重新定位到一個內存地址上。這種間接訪問對象的模式增強了系統對引用對象的控制。

在上世紀80年代的操作系統(如Mac OS 和Windows)的內存管理中,句柄被廣泛應用。Unix系統的文件描述符基本上也屬於句柄。和其它桌面環境一樣,WindowsAPI大量使用句柄來標識系統中的對象,並建立操作系統與用戶空間之間的通信渠道。例如,桌面上的一個窗體由一個HWND類型的句柄來標識。如今,內存容量的增大和虛擬內存算法使得更簡單的指針愈加受到青睞,而指向另一指針的那類句柄受到冷淡。儘管如此,許多操作系統仍然把指向私有對象的指針以及進程傳遞給客戶端的內部數組下標稱爲句柄。

由來

由來

由來

由來

由來

由來

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章