指標與控制代碼的區別

2021-08-06 01:16:36 字數 1272 閱讀 2807

指標與控制代碼的區別:

1、什麼是控制代碼?

控制代碼在windows程式設計中是乙個很重要的概念,在很多程式中都扮演者重要的角色。

在windows環境中,控制代碼是用來標識專案的,這些專案包括:

模組,任務,例項,檔案,記憶體塊,選單,控制,字型,

資源(包括圖示,游標,字串等),gdi物件(包括位圖,畫刷,元檔案,調色盤,畫筆,區域以及裝置描述表)。

windows是以虛擬記憶體為基礎的作業系統。在這種作業系統中,windows記憶體管理器在記憶體中來回

移動物件,從而滿足各種應用程式的記憶體需要。物件被移動意味著它的位址變化了。由於位址總是變化的,

所以windows作業系統為個應用程式騰出一些內儲存位址,專門用來登記各應用物件在記憶體中的位址變化,而

這些位址(儲存單元的位置)本身是不變的。windows的記憶體管理器在記憶體中移動物件位置後,把物件新位址

告知控制代碼位址來儲存。這樣只需記住這個控制代碼位址就可以間接地知道物件在記憶體中具體的位置,

這個位址在物件裝載時由系統分配,當系統解除安裝時又釋放給系統。

因此windows程式中並不是用實體地址來標識記憶體塊、檔案、任務或動態裝入模組的,相反,windowsapi

給這些專案分配確定的控制代碼,並將控制代碼返回給應用程式,然後通過控制代碼來進行操作。

在windows程式設計中會用到大量的控制代碼,比如:hinstance(例項控制代碼),hbitmap

(位圖控制代碼),hdc(裝置描述控制代碼),hicon(圖示控制代碼)等,其中還有乙個通用的控制代碼

,就是handle,如下列語句:

hinstance hinstance;

handle hinstance;

位址(不穩定)->實際物件。但是程式每次重新啟動,系統分配給程式的控制代碼並不一定

是原來的控制代碼,而且絕大多數情況下是不一樣的。

2、指標和控制代碼的區別:

指標對應著資料在記憶體中的位址,利用指標可以自由地修改資料。windows

並不希望一般程式修改其內部資料結構,因為這樣太不安全。所以,windows

給每個使用globalalloc等函式宣告的記憶體區域指定乙個控制代碼,即指向指標的指標。

(1)控制代碼所指可以是乙個複雜的結構,並且可以與系統有關,例如執行緒的控制代碼,它可以

指向乙個類或者結構,而且和系統有很密切的關係,當乙個執行緒由於不可預料的原因而終止時

,系統就可以返回它所占用的資料,如cpu,記憶體等,反之,控制代碼中的某一些項是與系統進行互動的。

(2)指標也可以指向乙個複雜的結構,但是通常是由使用者定義的,所以必要的工作要由使用者完成,

特別刪除部分的操作。

控制代碼與指標的區別

控制代碼實際上是一種指向某種資源的指標,但與指標又有所不同 指標對應著乙個資料在記憶體中的位址,得到了指標就可以自由地修改該資料。windows並不希望一般程式修改其內部資料結構,因為這樣太不安全。所以windows給每個使用globalalloc等函式宣告的記憶體區域指定乙個控制代碼 本質上仍是乙...

指標與控制代碼的區別

最近兩天在複習一些c 的知識,中間發現了許多以前沒有注意過的問題。關於控制代碼以前總是將其理解為指標,其實不然,他們之間有著明顯的區別。首先,指標指向系統中物理記憶體的位址,而控制代碼是windows在記憶體中維護的乙個物件記憶體實體地址列表的整數索引,控制代碼是一種指向指標的指標。在windows...

指標與控制代碼的區別

資源物件載入到記憶體時需要將首位址在資源列表中進行註冊,註冊後無論該資源物件的位址是否發生變化,其在資源列表中的註冊位置始終不變。控制代碼是乙個32位無符號整數,表示乙個物件記憶體位址列表的整數索引。控制代碼沒有直接指向資源物件,而是儲存著乙個資源物件在 資源註冊列表中的索引,也就是說控制代碼是間接...