控制代碼和指標的區別和聯絡

2022-07-16 12:21:12 字數 1023 閱讀 9322

很多人對控制代碼的概念不是很清楚或者理解很模糊。其實,控制代碼是乙個32為的整數,實際上是windows在記憶體中維護的乙個物件(視窗等)記憶體實體地址列表的整數索引。因為windows的記憶體管理經常會將當前空閒物件的記憶體釋放掉,當需要時訪問再重新提交到物理記憶體,所以物件的實體地址是變化的,不允許程式直接通過實體地址來訪問物件。程式將想訪問的物件的控制代碼傳遞給系統,系統根據控制代碼檢索自己維護的物件列表就能知道程式想訪問的物件及其實體地址了。

控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體位址。應用程式啟動後,組成這個程式的各物件是駐留在記憶體的。如果簡單的理解,似乎我們只要獲知這個記憶體的首位址,那麼就可以隨時用這個位址訪問物件。但是,如果您真的這樣認為,那麼您就大錯特錯了。我們知道,windows是乙個以虛擬記憶體為基礎的作業系統。在這種系統環境下,windows記憶體管理器經常在記憶體中來回移動物件,一次來滿足各種應用程式的記憶體需要。物件被移動意味著它的位址變化了。如果位址總是如此變化,我們該到**去找該物件呢?為了解決這個問題,windows作業系統為各應用程式騰出一些記憶體位址,用來專門登記各應用物件在記憶體中的位址變化,而這個位址(儲存單元的位置)本身是不變的。win記憶體管理器移動物件在記憶體中的位置後,把物件新的位址告知這個控制代碼位址來儲存。這樣我們只需記住這個控制代碼位址就可以間接地知道物件具體在記憶體中的哪個位置。這個位址是在物件裝載時由系統分配的,當系統解除安裝時又釋放給系統。控制代碼位址(穩定)->記載著物件在記憶體中的位址->物件在記憶體中的位址(不穩定)->實際物件。但是,必須注意的是,程式每次重新啟動,系統不能保證分配給這個程式的控制代碼還是原來的那個控制代碼,而且絕大多數情況下的確不一樣。假如我們把進入電影院看電影看成是乙個應用程式的啟動執行,那麼系統給應用程式分配的控制代碼總是不一樣,這和每次電影院售給我們的門票總是不同的座位是一樣的道理。

hdc是裝置描述表控制代碼。

cdc是裝置描述錶類。

用getsafehwnd和fromhandle可以互相轉換。

控制代碼和指標其實是兩個截然不同的概念。windows系統用控制代碼標記系統資源,用控制代碼隱藏系統的資訊。你只要知道有這個東西,然後去呼叫就行了,它是個32bit的uint。指標則標記某個物理記憶體位址,是不同的概念。

控制代碼和指標的區別

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

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

控制代碼在windows程式設計中是乙個很重要的概念,在許多地方都扮演著重要的角色。在windows環境中,控制代碼是用來標識專案的,這些專案包括 1 模組 module 2 任務 task 3 例項 instance 4 檔案 file 5 記憶體塊 block of memory 6 選單 me...

c 控制代碼和指標的區別

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