C 中的控制代碼 學習筆記(從其他地方參考的)

2021-07-02 19:39:51 字數 2592 閱讀 2632

這個控制代碼只是從英文

handle

翻譯過來的,只問句是什麼意思難以解釋,這個是我從別人的空間收集的資訊,

功能上的理解:

什麼是"控制代碼

"(handle

),handle

的本意是把柄,把手的意思。是你與作業系統打交道的東東。

舉個通俗的例子,比如你考上了大學,入學後,學校(作業系統)會給你乙個學生證號。

注意,這個號碼是學校指定的,你無法自選。

有了這個號碼(學生證,假設一證多用)享受學校提供的服務:

如你就可以去圖書館借書,去食堂吃飯,去教室上課等等。

但你不能到食堂裡買啤酒,因為學校不允許這種服務。

而在計算機中系統提供的服務就是

api呼叫,你有了

handle

,就可以理直氣壯地向系統提出呼叫

api的服務。

而指標的權力就大多了,有了指標你可以到處去喝酒,打架,學校(作業系統)管不著,

所以控制代碼和指標的區別在於控制代碼指標呼叫系統提供的服務。

而控制代碼雖然是乙個能相互區別的號碼,但與我們普通的

id號又有區別,

普通的id

號是可以由程式設計師自己定義的,而控制代碼不行,它是物件生成是系統指定的,

是為了區別系統中存在的各個物件,這個控制代碼不是由程式設計師符給的。

概念上的理解

1。控制代碼,是整個

windows

程式設計的基礎,乙個控制代碼是指使用的乙個唯一的整數值,

是指乙個四位元組長的數值,用於標誌應用程式中的不同物件和同類物件中的不同的例項,

諸如,乙個視窗,按鈕,圖示,滾動條,輸出裝置,控制項或者檔案等。

應用程式能夠通過控制代碼訪問相應的物件的資訊。

2。控制代碼不是乙個指標,程式不能利用它控制代碼來直接閱讀檔案中的資訊。

如果控制代碼不用在

i/o檔案中,它是毫無用處的。

3。控制代碼是

windows

用來標誌應用程式中建立的或是使用的唯一整數,

windows

使用了大量的控制代碼來來標誌很多物件。

機制上的理解

前面的分析很經典,但我認為有一點必須指出的。如果不對,請各位指證。

控制代碼是指標,一點不假,但是這個指標又與

c中的指標有不同之處。

因為windows

是乙個多工的系統,其記憶體是可以移動的,

這樣的話如果某一時刻有乙個指標指向一塊記憶體,之後的某個時刻卻被系統移走了,

如果你再用這個指標的話就會出錯。

為了解決這一問題,

windows

在系統專區開一塊記憶體用於存放控制代碼,這個控制代碼的值就是乙個位址,

當這一塊記憶體被移走後,

windows

就修改這個控制代碼的值,再訪問這塊記憶體時,控制代碼的值總是有效的。

正因為這樣當你使用

globalalloc

分配的記憶體時,如果你指定這塊記憶體的屬性是固定的,

那麼它的返回值可以直接給乙個指標,如果是可以移動的,

返回值就必須給乙個控制代碼,你就必須先

globallock

後才能使用。

這是我對控制代碼理解,不知道對不對?

我的理解

其實,控制代碼是乙個指向指標的指標。即:

在windows

程式設計中,控制代碼僅是乙個應用程式用來識別某些事情的數字

如果想更透徹一點地認識控制代碼,我可以告訴大家,控制代碼是一種指向指標的指標。

我們知道,所謂指標是一種記憶體位址。

應用程式啟動後,組成這個程式的各物件是住留在內的

。如果簡單地理解,似乎我們只要獲知這個記憶體的首位址,那麼就可以隨時用這個位址訪問物件。

但是,如果您真的這樣認為,那麼您就大錯特錯了。

我們知道,

windows

是乙個以虛擬記憶體為基礎的作業系統。在這種系統環境下,

windows

記憶體管理器經常在記憶體中來回移動物件,依此來滿足各種應用程式的記憶體需要。

物件被移動意味著它的位址變化

了。如果位址總是如此變化,我們該到**去找該物件呢

?為了解決這個問題,

windows

作業系統為各應用程式騰出一些內儲存位址,

用來專門

登記各應用物件在記憶體中的位址變化,而這個位址

(儲存單元的位置

)本身是不變的。

wi ndows

記憶體管理器在移動物件在記憶體中的位置後,把物件新的位址告知這個控制代碼位址來儲存。

這樣我們只需記住這個控制代碼位址就可以間接地知道物件具體在記憶體中的哪個位置。

這個位址是在物件裝載

(load)

時由系統分配給的,當系統解除安裝時

(unload)

又釋放給系統。

控制代碼位址(穩定

)→記載著物件在記憶體中的位址

→物件在記憶體中的位址

(不穩定

) →實際物件

但是,必須注意的是程式每次從新啟動,系統不能保證分配給這個程式的控制代碼還是

原來的那個控制代碼,而且絕大多數情況的確不一樣的。假如我們把進入電影院看電影看成

是乙個應用程式的啟動執行,那麼系統給應用程式分配的控制代碼總是不一樣,這和每次電

影院售給我們的門票總是不同的乙個座位是一樣的道理。

學習雜記(從其他地方複製的 )

起床時間是乙個錨,用它來確定我們的作息規律最為合適,所以確定起床時間是首要問題,建議你的起床時間往4 30 6 00 7 30這三個時間靠,其中7 30起床是最理想的,比如你想6 30起床,那麼我建議你還是6 00起床比較好,因為6 00這個時間更加符合晝夜節律。如果你確定6 00起床,那麼你可以根...

從其他地方蒐集來的文章,收藏在這裡

1 手工測試用例和自動化測試用例功能定位的區別。a 手工測試用例 i.較好的異常處理能力,能通過人為的邏輯判斷校驗當前步驟的功能實現正確與否。ii.人工執行用例具有一定的步驟跳躍性。iii.人工測試步步跟蹤,能夠細緻的定位問題。iv.主要用來發現功能缺陷 b 自動化測試用例 i.執行物件是指令碼,任...

從C 到C 我的C語言學習筆記

剛上大學就學習了c 有人跟我說c 包括了c語言,學過c 就沒有必要在弄c語言了。也有人說,c語言是程式設計師的通用語言,我們都應該花時間好好研究一下。之前也有看過一些書,這些書的作者也都建議讀者學好c,而且強調不是c 一直都有學習c語言的打算,直到我嘗試寫c程式發現編譯都不過時,我才覺得我真有必要好...