
評論 ┆ 舉報最佳答案此答案由提問者自己選擇,并不代表百度知道知識人的觀點回答:愛你十萬年新手9月28日 13:48 從Visual C++的頭文件來看,HANDLE被typedef為void的指針,那是指向未確定數據結構的指針:typedef void* HANDLE; 但是這并不說明任何問題,因為句柄遠遠不只是指向任意數據類型的指針 。它是指向數據對象指針的指針 。句柄的使用來源于早期的Windows,當時它只能在有限內存的機器中允許(因為當時內存昂貴也存儲小) 。為了留出足夠的空間內存以運行其他程序,Windows經常將對象在內存中移動 。但是如果進程已經有了指向該對象的指針,移動該對象就將使得指針無效 。為了處理這一問題,Microsoft使用系統指針以跟蹤對象 。程序不是直接使用指針,而是使用句柄,讓它引用包含真實對象的地址 。通過這一方法,Windows可以安全按照需要移動對象,然后更新參考中的指針,從而允許進程安全地訪問對象 。當進程需要使用句柄訪問對象時,它調用GlobalLocl()以鎖定內存的對象 。這時Windows將返回對象的實際地址,從而進程可以安全讀寫該對象 。只要對象被進程鎖定,Windows就不會去移動它 。句柄包含的不只是對象的地址;比如,它還包含鎖計數器,標識著多少進程已經請求過對象的地址 。只要這個鎖計數器大于0,Windows就不會移動該對象 。這個思想擴展到大部分對象上,包括文件,也由其句柄標識 。這時,句柄就是指向對象的指針,而該對象包含指向另一個對象的指針 。這對于現在的機器有些奇怪 。當Windows從單個分時共享程序向多任務操作系統轉變時,有如此之多的遺留代碼需要在新的操作系統上運行,于是句柄在這一轉變中保留下來了 。揪錯 ┆ 評論 ┆ 舉報
【句柄和偽句柄有什么區別?~】
猜你喜歡
- 甲硝唑和酒一起喝會死嗎?
- 創界和沃蘭多發動機一樣嗎?
- 誰能講講TK-55和TK57哪個好,都是AMD64位雙核的,前端總線800兆,和T5450比怎么樣?T5450前端總線667。
- “海煙沈處倒殘霞,一杼鮫綃和淚織。”用了什么典故
- 鮮艾草泡水的功效和作用
- 心靈法醫丁春秋和鐘局什么關系
- 哪個吊大的有詭案組電視劇百度云,加我百度云 心系滄瀾 或者種子和磁力鏈接也可以,找了兩年了,謝謝各位
- 適時四驅的優點和缺點是什么
- 朱元璋與劉福通的關系
- 狗狗能吃桔子和橙子嗎?
