標籤:windows
由來 windows 之所以要設立控制代碼,根本上源於記憶體管理機制的問題—虛擬位址,簡而言之資料的地址需要變動,變動以後就需要有人來記錄管理變動,(就好像戶籍管理一樣),因此系統用控制代碼來記載資料地址的變更。
資料對象載入進入記憶體中之後即獲得了地址,但是這個地址並不是固定的,(至於為什麼以及什麼情況下變動具體需要大家研究虛擬位址的原理與機制我這裡只提我確定知道的例子)資料對象會根據需要在記憶體與硬碟之間遊弋移動(例如不常用的資料會為常用資料讓出其佔用的記憶體空間進而被淘汰進硬碟中的虛擬記憶體之中以最佳化配置整體系統的資源進而提升效率效能),因此其物理地址總是變動的,那麼作為管理者 則必須對 管理對象所發生的變化了如指掌才行,因此系統為進程分配固定的地址(控制代碼)來儲存進程下的資料對象變化後的地址也就是當前的地址,其實設計機制很簡單 :系統的某個部門移動了對象的地址後,同時上報給控制代碼所屬部門管理者,管理者將改動寫入控制代碼即可。該資料被重新起用時去其所屬控制代碼內按內容存取即可。
控制代碼,英文:HANDLE,在Windows編程中是一個很重要的概念,在許多地方都扮演著重要的角色。但由此而產生的控制代碼概念也大同小異,比如:《Microsoft Windows 3 Developer\‘s Workshop》(Microsoft Press,by Richard Wilton)一書中控制代碼的概念是:在Windows環境中,控制代碼是用來標識項目的。
在程式設計中,控制代碼是一種特殊的智能指標 。當一個應用程式要引用其他系統(如資料庫、作業系統)所管理的記憶體塊或對象時,就要使用控制代碼。
控制代碼與普通指標的區別在於,指標包含的是引用對象的記憶體位址,而控制代碼則是由系統所管理的引用標識,該標識可以被系統重新置放到一個記憶體位址上。這種間接訪問對象的模式增強了系統對引用對象的控制。
在上世紀80年代的作業系統(如Mac OS 和Windows)的記憶體管理中,控制代碼被廣泛應用。Unix系統的檔案描述符基本上也屬於控制代碼。和其它案頭環境一樣,WindowsAPI大量使用控制代碼來標識系統中的對象,並建立作業系統與使用者空間之間的通訊渠道。例如,案頭上的一個表單由一個HWND類型的控制代碼來標識。如今,記憶體容量的增大和虛擬記憶體演算法使得更簡單的指標愈加受到青睞,而指向另一指標的那類控制代碼受到冷淡。儘管如此,許多作業系統仍然把指向私人對象的指標以及進程傳遞給用戶端的內部數組下標稱為控制代碼。
由來
由來
由來
由來
由來
由來
本文出自 “0℃非安全” 部落格,請務必保留此出處http://774733240.blog.51cto.com/10348799/1662940
windows程式設計(一)對控制代碼的認識