控制代碼是乙個指向指標的指標,我們知道,指標中儲存的是記憶體位址。那麼乙個指向指標的指標,它儲存的就是另乙個指標的位址,我們可以通過乙個指標來找到另乙個指標,再通過另乙個指標訪問到具體的資料,那麼為什麼要這麼麻煩呢?
我們知道,當執行乙個占用大量記憶體的程式時,系統記憶體很快就會被填滿,這時 windows 就會自動將那些暫時不用的資料放到硬碟中,而這些資料所佔的空間就是虛擬記憶體。打個比方,電腦剩餘的記憶體只有1g,我們同時執行遊戲和qq,遊戲占用1g記憶體,qq占用100m記憶體,假如沒有虛擬記憶體,那麼qq就不能執行,因為系統無法分配給qq合適大小的記憶體,但是有了虛擬記憶體,那麼就可以將遊戲一些不常用的資料轉移出來,放到虛擬記憶體中,比如儲存到硬碟的乙個叫做pagefile.sys的檔案中,同時釋放掉這些被轉移的資料所佔的記憶體空間,這樣就有了足夠的記憶體執行qq,而當遊戲執行到需要載入那些被轉移的資料時,可以釋放掉一些不常用的資料所佔的空間,將其儲存到硬碟檔案pageflie.sys中,然後再讀取pagefile.sys檔案中關於遊戲的資料,這樣迴圈移動資料的過程就是微軟的虛擬記憶體技術。
我們看到,為了最大限度地使用物理記憶體,windows 需要經常在物理記憶體和虛擬記憶體中來回移動資料,以此來滿足各種應用程式的記憶體需要。資料被移動意味著它的位址發生了變化。假如我們仍然按照之前的位址來訪問它,時會出錯的,那麼我們如何才能得到資料的真正位址呢?為解決這個問題,windows 作業系統專門騰出來一塊記憶體空間來儲存資料在記憶體中的位址變化,windows 作業系統每次移動資料後,都要把資料新的位址告訴這個記憶體空間來儲存,而記錄位址變化的這塊記憶體空間的位址是保持不變的。
我們把這個不變的位址叫做控制代碼,我們就可以通過該控制代碼找到指向資料最新位址的指標,然後再通過這個指標來訪問資料。
但是必須注意的是,程式每次重新啟動,windows 作業系統所分配的控制代碼是不一樣的,這就好像每次**都抽到不同的號碼一樣,當然也有可能抽到同乙個號碼,不過概率很低。
控制代碼是什麼
一 控制代碼定義 控制代碼就是個數字,一般和當前系統下的整數的位數一樣,比如32bit系統下就是4個位元組。這個數字是乙個物件的唯一標示,和物件一一對應。這個物件可以是乙個塊記憶體,乙個資源,或者乙個服務的context 如 socket,thread 等等。這個數字的 可以有很多中,只要能保證和它...
控制代碼是什麼
控制代碼 handle 是乙個是用來標識物件或者專案的識別符號,可以用來描述窗體 檔案等,值得注意的是控制代碼不能是常量 handle 控制代碼,是windows用來表示物件的 不是c 的物件 hwnd是其中一種,hwnd是handle,但handle不只是hwnd,handle是乙個通用控制代碼表...
Linux 控制代碼是什麼
1.控制代碼就是乙個識別符號,只要獲得物件的控制代碼,我們就可以對物件進行任意的操作。2.控制代碼不是指標,作業系統用控制代碼可以找到一塊記憶體,這個控制代碼可能是識別符號,map的key,也可能是指標,看作業系統怎麼處理的了。fd算是在某種程度上替代控制代碼吧 linux 有相應機制,但沒有統一的...