首先,指標指向系統中物理記憶體的位址,而控制代碼是windows在記憶體中維護的乙個物件記憶體實體地址列表的整數索引,控制代碼是一種指向指標的指標。
在windows系統中的記憶體管理一般會將當前處於空閒狀態的物件的記憶體釋放掉,當需要訪問的時候再重新提交分配物理記憶體,從而導致物件的實體地址是變化的,
這樣就不允許系統直接通過指標來訪問(實體地址不斷變化)的物件。
控制代碼是一種指向指標的指標。由於windows是一種以虛擬記憶體為基礎的作業系統,其記憶體管理器經常會在記憶體中來回的移動物件,以此來滿足各種應用程式對記憶體的需求。
而物件的移動意味著物件記憶體位址的變化,正是因為如此,如果直接使用指標,在記憶體位址被改變後,系統將不知道到**去再呼叫這個物件。
windows系統為**解決這個問題,系統專門為各種應用程式騰出了一定的記憶體位址(控制代碼)專門用來記錄這些變化的位址(這些記憶體位址就是指向指標的指標),這些記憶體位址本身是一直不變化的。windows記憶體管理器在移動某些物件之後,他會將這些物件新的記憶體位址傳給控制代碼,告訴他移動後物件去了**。
指標可以直接操作核心物件,這樣可以修改資料,比較危險。不是我們想要的。而控制代碼只是乙個索引,通過api函式來操作就安全很多。由於windows記憶體中的資料轉移(在記憶體和硬碟中來回轉移)若是使用指標的話,無法找到對應的指標位置,而控制代碼則是專門記錄這種位址變動的。
控制代碼(穩定的)----->記載著物件在記憶體中的位址---->物件在記憶體中的位址(不穩定的)---->記載著實際物件的位址。
圖中實線表示初始化的情況,虛線表示在記憶體管理器處理之後的情況
什麼是控制代碼?指標和控制代碼的區別
控制代碼在windows程式設計中是乙個很重要的概念,在許多地方都扮演著重要的角色。在windows環境中,控制代碼是用來標識專案的,這些專案包括 1 模組 module 2 任務 task 3 例項 instance 4 檔案 file 5 記憶體塊 block of memory 6 選單 me...
c 控制代碼和指標的區別
控制代碼實際上是一種指向某種資源的指標,但與指標又有所不同 指標對應著乙個資料在記憶體中的位址,得到了指標就可以自由地修改該資料。windows並不希望一般程式修改其內部資料結構,因為這樣太不安全。所以windows給每個使用globalalloc等函式宣告的記憶體區域指定乙個控制代碼 本質上仍是乙...
C 控制代碼和指標的區別
控制代碼實際上是一種指向某種資源的指標,但與指標又有所不同 指標對應乙個資料在記憶體中的位址,得到了指標就可以自由地修改該資料。windows並不希望一般程式設計師修改其內部資料結構,因為這樣不太安全。所以windows給每個使用globalalloc等函式宣告地記憶體區域指定乙個控制代碼 本質上仍...