控制代碼是乙個指向指標的指標,我們(學過c語言的)(應該都學過)知道,指標中儲存的是記憶體位址,那麼乙個指向指標的指標,他儲存的就是另乙個指標的位址,我們可以通過乙個指標來找到另乙個指標,然後再通過另乙個指標訪問到具體的資料,
那麼為什麼要這麼麻煩呢?(單就乙個指標就夠煩惱了
我們知道,當執行乙個占用大量記憶體的程式的時候,系統記憶體很快就會被填滿,這時windows就會自動將那些暫時不用的資料放到硬碟中,而這些資料所佔的空間就是虛擬記憶體.打個比方,電腦的剩餘物理記憶體只有1g,我們同時執行遊戲和qq,遊戲占用1g記憶體,而qq占用100m,假如沒有虛擬記憶體,那麼qq就不能執行,因為系統無法給qq分配合適大小的記憶體,但是有了虛擬記憶體,那麼就可以將遊戲的一些不常用的資料轉移出來,存放到虛擬記憶體中,比如說儲存到硬碟上的乙個叫pagefile.sys的檔案中,同時釋放掉這些被轉移的資料,這樣就有了足夠的記憶體執行qq,而當遊戲執行到需要載入那些被轉移的資料時,可以釋放掉一些不常用的資料,將其儲存到硬碟檔案pagefile.sys中,然後再讀取pagefile.sys檔案中關於遊戲的資料,這樣迴圈移動資料的過程就是微軟的虛擬記憶體技術。
我們看到,為了最大限度的使用物理記憶體,windows需在物理記憶體和虛擬記憶體之間來回移動資料,以此來滿足各種應用程式的記憶體需要.資料被移動意味著它的位址發生了變化.假如我們仍然按照先前的位址來訪問它,是會出錯的.那麼我們如何才能得到資料正確的位址呢?
為了解決這個問題,windows作業系統專門騰出一塊記憶體空間用來儲存資料在記憶體中的位址變化,windows作業系統每次移動資料後,都要把資料新的位址告知這個記憶體空間來儲存,而記錄位址變化的這塊記憶體空間它的位址是保持不變的.
我們把這個不變的位址叫做控制代碼,我們就可以通過該控制代碼找到資料的最新位址,然後訪問該資料.
但是,必須注意的是程式每次重新啟動,wingdows作業系統所分配的控制代碼都是不一樣的,這就好像每次**都抽到不同的號碼一樣,當然也有可能抽到同乙個號碼,只不過機率小了點罷了.
task struct到底是個神馬東西?
上回我們說到了常用的作業系統程序排程演算法,學過作業系統的同學應該都知道作業系統的四大職能 程序管理 記憶體管理 裝置管理以及檔案系統的管理。那麼最重要的職能之一 程序管理,是如何進行的呢?首先在要管理乙個程序的時候,我們需要知道某個程序的具體資訊,比如程序的pid 優先順序等等,所以我們就需要乙個...
Lucene到底是個什麼東西
lucene是個開源的搜尋引擎,如果你的專案的一些資訊需要被搜尋,但又沒有合適的搜尋工具,那麼你應該考慮使用它.為什麼我會使用這個玩意?mysql 全文索引對中文支援很差 也許是我對 mysql沒有很深入的研究導致的 大家可以關注海量科技對 mysql的中文搜尋支援,他們的玩意我沒試過,不方便說三道...
區塊鏈到底是神馬鬼東西
區塊鏈 的概念火了,但節奏較快的網際網路世界仍有很多人不了解何為 區塊鏈 即便網上有太多介紹此物的 名詞解釋 但也都過於古板和難懂,那麼今天我給大家講個 故事 讓更多使用者秒懂何為 區塊鏈 區塊鏈本質上是乙個分布式的公共賬本,聽起來很矇圈?別急,後面會用最深入淺出的方式來一一解釋。任何人都可以對這個...