日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VirtualAlloc和VirtualCopy----VirtualFree

發布時間:2024/4/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VirtualAlloc和VirtualCopy----VirtualFree 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

VirtualAlloc 和VirtualCopy
VirtualAlloc 首先會從我們的虛擬地址空間中申請(或者說預留)一塊虛擬空間,準備接下來要用它。注意此時,可用的物理內存并沒有減少,只是虛擬地址少了一塊可用的區域。
真正把這塊之前reserved的虛擬空間映射到物理的內存區域就是由VirtualCopy來干的,此時,MMU的頁表就會增加一個entry,來表示物理--虛擬的映射關系。
???

VirtualFree

VirtualFree 釋放內存(映射->分配/分配->空閑/映射->空閑)
??
再說動態虛擬內存映射和靜態虛擬內存映射
OEMaddressTable只是建立了一個一級的靜態虛擬--物理的映射關系,一般給kernel(NK.EXE)通過直接訪問的形式來用(OALPAtoVA);
MmMapIOSpace(VirtualAlloc +VirtualCopy)是一種動態虛擬映射的手段,一般給驅動根據當前需要(對硬件操作)動態申請并建立映射。

?

?

那就是說VirtualCopy 可以直接把物理內存映射到虛擬內存中
而OEMaddressTable所建立的靜態虛擬--物理的映射不是必須的

也就是說比如對寄存器的映射:
可以通過VirtualAlloc申請(預留)一塊虛擬內存給寄存器(如:v_pIOPregs)
然后用
VirtualCopy直接把寄存器的物理地址映射到剛才申請(預留)的虛擬地址空間

而在OEMaddressTable中所做的寄存器物理地址與虛擬地址的映射這步可以省略

不是省略不省略的問題,是這兩種方法是在不同的場合下使用的,如2樓說的,內核部分就要用這個OEMaddressTable來轉換,wince5.0下 用戶態的驅動(wince6.0驅動貌似是在內核態)就要用這個VirtualAlloc+VirtualCopy來進行地址映射。

OEMaddressTable的定義,你可以查看 bsp/src/inc/oemaddrtab_cfg.inc ,那個g_oalAddressTable便是。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的VirtualAlloc和VirtualCopy----VirtualFree的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。