控制代碼是一個指向指標的指標,我們(學過C語言的)(應該都學過)知道,指標中儲存的是記憶體位址,那麼一個指向指標的指標,他儲存的就是另一個指標的地址,我們可以通過一個指標來找到另一個指標,然後再通過另一個指標訪問到具體的資料,
那麼為什麼要這麼麻煩呢?(單就一個指標就夠煩惱了)
我們知道,當運行一個佔用大量記憶體的程式的時候,系統記憶體很快就會被填滿,這時WINDOWS就會自動將那些暫時不用的資料放到硬碟中,而這些資料所佔的空間就是虛擬記憶體.打個比方,電腦的剩餘實體記憶體只有1G,我們同時運行遊戲和QQ,遊戲佔用1G記憶體,而QQ佔用100M,假如沒有虛擬記憶體,那麼QQ就不能運行,因為系統無法給QQ分配合適大小的記憶體,但是有了虛擬記憶體,那麼就可以將遊戲的一些不常用的資料轉移出來,存放到虛擬記憶體中,比如說儲存到硬碟上的一個叫pagefile.sys的檔案中,同時釋放掉這些被轉移的資料,這樣就有了足夠的記憶體運行QQ,而當遊戲運行到需要載入那些被轉移的資料時,可以釋放掉一些不常用的資料,將其儲存到硬碟檔案pagefile.sys中,然後再讀取pagefile.sys檔案中關於遊戲的資料,這樣迴圈移動資料的過程就是微軟的虛擬記憶體技術。
我們看到,為了最大限度的使用實體記憶體,Windows需在實體記憶體和虛擬記憶體之間來回移動資料,以此來滿足各種應用程式的記憶體需要.資料被移動意味著它的地址發生了變化.假如我們仍然按照先前的地址來訪問它,是會出錯的.那麼我們如何才能得到資料正確的地址呢?
為瞭解決這個問題,WINDOWS作業系統專門騰出一塊記憶體空間用來儲存資料在記憶體中的地址變化,WINDOWS作業系統每次移動資料後,都要把資料新的地址告知這個記憶體空間來儲存,而記錄地址變化的這塊記憶體空間它的地址是保持不變的.
我們把這個不變的地址叫做控制代碼,我們就可以通過該控制代碼找到資料的最新地址,然後訪問該資料.
但是,必須注意的是程式每次重新啟動,WINGDOWS作業系統所分配的控制代碼都是不一樣的,這就好像每次抽獎都抽到不同的號碼一樣,當然也有可能抽到同一個號碼,只不過幾率小了點罷了.