指標與控制代碼的區別

2021-09-08 14:52:01 字數 796 閱讀 5261

最近兩天在複習一些c++的知識,中間發現了許多以前沒有注意過的問題。關於控制代碼以前總是將其理解為指標,其實不然,他們之間有著明顯的區別。

首先,指標指向系統中物理記憶體的位址,而控制代碼是windows在記憶體中維護的乙個物件記憶體實體地址列表的整數索引,控制代碼是一種指向指標的指標。

在windows系統中的記憶體管理一般會將當前處於空閒狀態的物件的記憶體釋放掉,當需要訪問的時候再重新提交分配物理記憶體,從而導致物件的實體地址是變化的,

這樣就不允許系統直接通過指標來訪問(實體地址不斷變化)的物件。

控制代碼是一種指向指標的指標。由於windows是一種以虛擬記憶體為基礎的作業系統,其記憶體管理器經常會在記憶體中來回的移動物件,以此來滿足各種應用程式對記憶體的需求。

而物件的移動意味著物件記憶體位址的變化,正是因為如此,如果直接使用指標,在記憶體位址被改變後,系統將不知道到**去再呼叫這個物件。

windows系統為**解決這個問題,系統專門為各種應用程式騰出了一定的記憶體位址(控制代碼)專門用來記錄這些變化的位址(這些記憶體位址就是指向指標的指標),這些記憶體位址本身是一直不變化的。windows記憶體管理器在移動某些物件之後,他會將這些物件新的記憶體位址傳給控制代碼,告訴他移動後物件去了**。

控制代碼(穩定的)----->記載著物件在記憶體中的位址---->物件在記憶體中的位址(不穩定的)---->記載著實際物件的位址。

圖中實線表示初始化的情況,虛線表示在記憶體管理器處理之後的情況

指標與控制代碼的區別

指標與控制代碼的區別 1 什麼是控制代碼?控制代碼在windows程式設計中是乙個很重要的概念,在很多程式中都扮演者重要的角色。在windows環境中,控制代碼是用來標識專案的,這些專案包括 模組,任務,例項,檔案,記憶體塊,選單,控制,字型,資源 包括圖示,游標,字串等 gdi物件 包括位圖,畫刷...

控制代碼與指標的區別

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

指標與控制代碼的區別

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