記憶體控制代碼與指標的區別

2021-04-13 11:20:46 字數 1274 閱讀 4773

問題: 請專家詳細介紹一下記憶體控制代碼與指標的區別。 

指標對應著乙個資料在記憶體中的位址,得到了指標就可以自由地修改該資料。windows並不希望一般程式修改其內部資料結構,因為這樣太不安全。所以windows給每個使用globalalloc等函式宣告的記憶體區域指定乙個控制代碼(本質上仍是乙個指標,但不要直接操作它),平時你只是在呼叫api函式時利用這個控制代碼來說明要操作哪段記憶體。當你需要對某個記憶體進行直接操作時,可以使用globallock鎖住這段記憶體並獲得指標來直接進行操作。

lshgao的意見:

控制代碼是指標的「指標」,使用控制代碼主要是為了利於windows在程序記憶體位址空間移動分配的記憶體塊,以防止程序的記憶體空間被撕的四分五裂而存在過多的碎片。

阿城的意見:

控制代碼是一些表的索引也就是指向指標的指標。間接的引用物件,windows可以修改物件的"物理"位址和

描述器的值,但是控制代碼的值是不變的。

劉志用的意見:

控制代碼和指標都是位址,不同在於:

1,控制代碼所指的可以是乙個很複雜的結構,並且很有可以是與系統有關的,比如說上面所說的執行緒的控制代碼,它指向的就是乙個很類或者結構,他和系統有很密切的關係,當乙個執行緒由於不可預料的原因,而終止時在系統就可以回它所占用的資料,如cpu,記憶體等等,反過來想可以知道,這個控制代碼中的某一些項,是與系統進行互動的。由於windows系統,是乙個多工的系統,它隨時都可能要分配記憶體,**記憶體,重組記憶體。

2,指標它也可以指向乙個複雜的結構,但是通常是使用者定義的,所以的必需的工作都要使用者完成,特別是在刪除的時候。

但在vc++6.0中也有一些指標,它們都是處理一些小問題才用的,如最常見的字元的指標,它也是要使用者處理的如果你動態分配了記憶體;但是cstring就不要使用者處理了,它其實是vc++中的乙個類,所以的操作都由成員函式完成,產生(分配)由建構函式,刪除(**)由析構函式完成。

相關問題:

qa000194 "怎樣對經呼叫api函式globalalloc及globallock得到的記憶體塊進行讀寫操作"

zjf問:

你好,我在學習用vc++6.0編譯多執行緒程式中遇到了很多控制代碼,但是不明白他的具體作用以及如何使用控制代碼,希望您能給我舉幾個具體例項,不甚感激!

比如說: handle hthread,它是怎樣具體使用的?

答:你使用createthead後函式會返回乙個控制代碼,它代表這個執行緒。你可能會呼叫setthreadpriority去修改執行緒的優先順序,使用resumethread去重新開始乙個執行緒的執行,在呼叫這些函式時你都需要告訴系統你到底要操作哪個執行緒,而剛才返回的控制代碼派上用處了,這些函式的第乙個引數就是執行緒的控制代碼。

指標與控制代碼的區別

指標與控制代碼的區別 1 什麼是控制代碼?控制代碼在windows程式設計中是乙個很重要的概念,在很多程式中都扮演者重要的角色。在windows環境中,控制代碼是用來標識專案的,這些專案包括 模組,任務,例項,檔案,記憶體塊,選單,控制,字型,資源 包括圖示,游標,字串等 gdi物件 包括位圖,畫刷...

控制代碼與指標的區別

控制代碼實際上是一種指向某種資源的指標,但與指標又有所不同 指標對應著乙個資料在記憶體中的位址,得到了指標就可以自由地修改該資料。windows並不希望一般程式修改其內部資料結構,因為這樣太不安全。所以windows給每個使用globalalloc等函式宣告的記憶體區域指定乙個控制代碼 本質上仍是乙...

指標與控制代碼的區別

最近兩天在複習一些c 的知識,中間發現了許多以前沒有注意過的問題。關於控制代碼以前總是將其理解為指標,其實不然,他們之間有著明顯的區別。首先,指標指向系統中物理記憶體的位址,而控制代碼是windows在記憶體中維護的乙個物件記憶體實體地址列表的整數索引,控制代碼是一種指向指標的指標。在windows...