什麼是控制代碼?指標和控制代碼的區別

2021-07-31 14:42:48 字數 1514 閱讀 3355

控制代碼在windows程式設計中是乙個很重要的概念,在許多地方都扮演著重要的角色。在windows環境中,控制代碼是用來標識專案的,這些專案包括:

(1)模組(module)

(2)任務(task)

(3)例項(instance)

(4)檔案(file)

(5)記憶體塊(block of memory)

(6)選單(menu)

(7)控制(control)

(8)字型(font)

(9)資源(recource),包括圖示(icon),游標(cursor),字串(string)等

(10)gdi物件(gdi object),包括位圖(bitmap),畫刷(brush),元檔案(metafile),調色盤(palette),畫筆(pen),區域(region),以及裝置描述表(device context)

windows是乙個以虛擬記憶體為基礎的作業系統,在這種環境下,windows記憶體管理器經常在記憶體中來回移動物件,以此來滿足各種應用程式的需要。物件被移動意味著它的位址變化了。由於位址總是如此變化,所以windows作業系統為各應用程式騰出一些記憶體位址,用來專門登記各應用物件在記憶體中的位址變化,而這位址(儲存單元的位置)本身是不變的。windows記憶體管理器在移動物件在記憶體中的位置後,把物件新的位址告知這個控制代碼位址來儲存。這樣我們只需記住這個控制代碼位址就可以間接地知道物件具體在記憶體中的哪個位置。這個位址是在物件裝載(load)時由系統分配給的,當系統解除安裝時(unload)又釋放給系統。

因此,windows程式中並不是用實體地址來標識乙個記憶體塊,檔案,任務,或動態裝入模組的,相反,windows api給這些專案分配確定的控制代碼,並將控制代碼返回給應用程式,然後通過控制代碼來進行操作。

在windows程式設計中會用到大量的控制代碼,比如hinstance(例項控制代碼),hbitmap(位圖控制代碼),hdc(裝置表述控制代碼),hicon(圖示控制代碼)等。這當中還有乙個通用的控制代碼,就是handle,比如下面的語句:

1 hinstance hinstance ;

2 handle hinstance ;

控制代碼位址(穩定)->記載著物件在記憶體中的位址->物件在記憶體中的位址(不穩定)->實際物件。但是,必須注意注意的是,程式每次重新啟動,系統不能保證分配給這個程式的控制代碼還是原來的那個控制代碼,而且絕大多數情況的確是不一樣的。

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

(1)控制代碼所指的可以是乙個很複雜的結構,並且很有可能是與系統相關的,比如說執行緒的控制代碼,它指向的就是乙個類或者結構,它和系統有很密切的關係。當乙個執行緒由於不可預料的原因而終止時,系統就可以返回它所占用的的資料,如cpu ,記憶體等。反過來想可以知道,這個控制代碼中的某一些項是與系統進行互動的。由於windows系統是乙個多工的系統,它隨時都可能要分配記憶體,**記憶體,重組記憶體。

(2)指標也可以指向乙個複雜的結構,但是通常是使用者定義的,所以必須的工作都要使用者完成,特別是在刪除的時候。

控制代碼和指標的區別

首先,指標指向系統中物理記憶體的位址,而控制代碼是windows在記憶體中維護的乙個物件記憶體實體地址列表的整數索引,控制代碼是一種指向指標的指標。在windows系統中的記憶體管理一般會將當前處於空閒狀態的物件的記憶體釋放掉,當需要訪問的時候再重新提交分配物理記憶體,從而導致物件的實體地址是變化的...

什麼是控制代碼

控制代碼是wondows用來標識被應用程式所建立或使用的物件的唯一整數,windows使用各種各樣的 控制代碼標識諸如應用程式例項,視窗,控制,位圖,gdi物件等等。windows 控制代碼有點象c語言中的檔案 控制代碼。從上面的定義中的我們可以看到,控制代碼是乙個識別符號,是拿來標識物件或者專案的...

什麼是控制代碼?

控制代碼就是編好的程式exe或dll在被windows系統呼叫時,windows給這些程式進駐電腦記憶體空間所分配的乙個編號 記憶體位址 windows中幾乎所有的東西都是用控制代碼來標識的,檔案控制代碼 視窗控制代碼 執行緒控制代碼和模組控制代碼等。控制代碼位址是乙個程式進駐電腦記憶體的起始位址。...