回覆列表
  • 1 # 使用者8078482822893

    控制代碼是一個32位的整數,實際上是Windows在記憶體中維護的一個物件記憶體物理地址列表的整數索引。因為Windows的記憶體管理經常會將空閒物件的記憶體釋放掉,當需要訪問時再重新提交到物理記憶體,所以物件的物理地址是變化的,不允許程式直接透過物理地址來訪問物件。程式將想訪問的物件的控制代碼傳遞給系統,系統根據控制代碼檢索自己維護的物件列表就能知道程式想訪問的物件及物理地址了。 控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體地址。應用程式啟動後,組成這個程式的各物件是駐留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首地址,那麼就可以隨時用這個地址訪問物件。但是,Windos是一個以虛擬記憶體為基礎的作業系統。在這種系統環境下,Windows記憶體管理器經常在記憶體中來回移動物件,以此來滿足各種應用程式的記憶體需要。物件被移動意味著它的地址變化了。如果記憶體總是如此變化,我們該到哪裡去找該物件呢?為了解決這個問題,Windows作業系統為各應用程式騰出一些記憶體地址,用來專門登記各應用物件在記憶體中的地址變化,而這個地址本身是不會變的。Windows記憶體管理器移動物件在記憶體中的位置後,把物件新的地址告知這個控制代碼地址來儲存。這樣我們只需要記住這個控制代碼地址就可以間接地知道物件具體在記憶體中的哪個位置。這個地址是在物件裝載時由系統分配的,當系統解除安裝時又釋放給系統。但是,必須注意的是,程式每次重新啟動,系統不能保證分配給這個程式的控制代碼還是原來的那個控制代碼。而且絕大多數情況下的確不一樣。假如我們把進入電影院看電影看成是一個應用程式的啟動執行,那麼系統給應用程式分配的控制代碼總是不一樣,這和每次電影院售給我們的門票總是不同的座位是一樣的道理。控制代碼實際上是一種指向某種資源的指標,但與指標又有所不同:指標對應著一個數據在記憶體中的地址,得到了指標就可以自由地修改該資料。Windows並不希望一般程式修改其內部資料結構,因為這樣太不安全。所以Windows給每個使用GlobalAlloc等函式宣告的記憶體區域指定一個控制代碼(本質上仍是一個指標,但不要直接操作它,如果要操作該段記憶體,對於GlobalAlloc建立的可移動的記憶體,需要配合使用GlobalLock、GlobalUnlock),平時你只是在呼叫API函式時利用這個控制代碼來說明要操作哪段記憶體。HDC 是裝置描述表控制代碼CDC 是裝置描述表類你使用CreateThead後函式會返回一個控制代碼,它代表這個執行緒。你可能會呼叫SetThreadPriority去修改執行緒的優先順序,使用ResumeThread去重新開始一個執行緒的執行,在呼叫這些函式時你都需要告訴系統你到底要操作哪個執行緒,而剛才返回的控制代碼派上用處了,這些函式的第一個引數就是執行緒的控制代碼。

  • 2 # 使用者8078482822893

    控制代碼是一個32位的整數,實際上是Windows在記憶體中維護的一個物件記憶體物理地址列表的整數索引。因為Windows的記憶體管理經常會將空閒物件的記憶體釋放掉,當需要訪問時再重新提交到物理記憶體,所以物件的物理地址是變化的,不允許程式直接透過物理地址來訪問物件。程式將想訪問的物件的控制代碼傳遞給系統,系統根據控制代碼檢索自己維護的物件列表就能知道程式想訪問的物件及物理地址了。 控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體地址。應用程式啟動後,組成這個程式的各物件是駐留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首地址,那麼就可以隨時用這個地址訪問物件。但是,Windos是一個以虛擬記憶體為基礎的作業系統。在這種系統環境下,Windows記憶體管理器經常在記憶體中來回移動物件,以此來滿足各種應用程式的記憶體需要。物件被移動意味著它的地址變化了。如果記憶體總是如此變化,我們該到哪裡去找該物件呢?為了解決這個問題,Windows作業系統為各應用程式騰出一些記憶體地址,用來專門登記各應用物件在記憶體中的地址變化,而這個地址本身是不會變的。Windows記憶體管理器移動物件在記憶體中的位置後,把物件新的地址告知這個控制代碼地址來儲存。這樣我們只需要記住這個控制代碼地址就可以間接地知道物件具體在記憶體中的哪個位置。這個地址是在物件裝載時由系統分配的,當系統解除安裝時又釋放給系統。但是,必須注意的是,程式每次重新啟動,系統不能保證分配給這個程式的控制代碼還是原來的那個控制代碼。而且絕大多數情況下的確不一樣。假如我們把進入電影院看電影看成是一個應用程式的啟動執行,那麼系統給應用程式分配的控制代碼總是不一樣,這和每次電影院售給我們的門票總是不同的座位是一樣的道理。控制代碼實際上是一種指向某種資源的指標,但與指標又有所不同:指標對應著一個數據在記憶體中的地址,得到了指標就可以自由地修改該資料。Windows並不希望一般程式修改其內部資料結構,因為這樣太不安全。所以Windows給每個使用GlobalAlloc等函式宣告的記憶體區域指定一個控制代碼(本質上仍是一個指標,但不要直接操作它,如果要操作該段記憶體,對於GlobalAlloc建立的可移動的記憶體,需要配合使用GlobalLock、GlobalUnlock),平時你只是在呼叫API函式時利用這個控制代碼來說明要操作哪段記憶體。HDC 是裝置描述表控制代碼CDC 是裝置描述表類你使用CreateThead後函式會返回一個控制代碼,它代表這個執行緒。你可能會呼叫SetThreadPriority去修改執行緒的優先順序,使用ResumeThread去重新開始一個執行緒的執行,在呼叫這些函式時你都需要告訴系統你到底要操作哪個執行緒,而剛才返回的控制代碼派上用處了,這些函式的第一個引數就是執行緒的控制代碼。

  • 中秋節和大豐收的關聯?
  • 佐滕麻衣演過哪些電視劇?