MEM_COMMIT 实际的配置记忆体MEM_RESERVE.PPT

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MEM_COMMIT 实际的配置记忆体MEM_RESERVE

Using Virtual Memory in your application Introduce to Windows Memory Management Windows 提供了三種記憶體管理機制 Virtual Memory 專門處理大規模的物件陣列與結構陣列機制 Memory-Mapped File 大規模資料串流(檔案) , 也可以讓單一機器共享資料的一種方式 Heap 處理大量小資料的機制 Virtual Memory 的功能 在位址空間中保留一個區域、從分頁檔中為該區域安排實際儲存體、並為該實際儲存體設定保護屬性 Win32 記憶體管理階層圖 Reserving a Region in an Address Space 下列的情況下, VirtualAlloc ? NULL (失敗) 你指定的位址沒有足夠的空間 你指定的位址不在 user-mode partition 內 使用者指定 Reserving 位址 我要如何知道記憶體的配置情況? 你可以使用 VirtualQuery 幫你查閱 直接來看範例 使用者 COMMIT 位址 若你想直接指定起始位址時, 你必須要先 Reserving , 再 COMMIT 有關於起始位址的討論 如同前面提到, VirtualAlloc 傳回來的位址 必須遵循 granularity boundary (64KB) 條件 Reserve 一塊記憶體的策略 如果你希望先保留記憶體, 很久之後才會使用. 那麼你應該把它放在越高的位址越好 Protected 屬性 你可以指定 PAGE_NOACCESS, PAGE_READWRITE, PAGE_READONLY, PAGE_ EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE Committing一塊實體記憶體給 Reserve 的區間 你必須要 Commit 你的區塊,才能進行存取 系統會從 page file 中安排實際的記憶體給你 Reserve 的區塊 以 page 為單位 (4 KB) 使用範例 考慮另一種情況 若你已經從5,242,880的地方開始 Reserve 512 kB 的區塊, 而你希望 commit 的位置是 5,242,880 + 2k 開始的一塊 大小為 6KB的記憶體 安排 COMMIT 的時機 考慮下面程式 使用 Virtual Memory 的優勢 Reserving 一塊大區域, 但不需要為這個區域安排實際儲存體 當使用者第一次需要輸入資料時, 只要 COMMIT 指定的那個 Cell 即可 如何知道我要 Commit 哪個記憶體區塊? 釋放記憶體 你可以在執行過程中, 更改 protected 屬性 修改屬性的簡單範例 Memory Reset 的功能 程式基本上, 必須載入 RAM 才能執行. Page fault: 當程式存取的 page 不在 RAM 中時, 系統必須從 page file 中將資料所在的page 載到RAM中. 但問題是 RAM 的空間不足 系統必須選一個在 RAM 中的犧牲者(page),置換到 page file 中. 如果該 Page 沒有寫資料 ? 那麼直接丟棄 如果有資料更動 ? 必須把該項 page 寫到 page file 中保存. 使用時機 當你的記憶體只是想要暫存資料 當使用完後, 資料就不重要了 並沒有要 Free 掉記憶體, 因為下次可能還要用到 注意事項: Reset 是以 page 為單位 附錄 Global 與 Local functions 專門用來 porting 16-bit 的程式,主要是為了向前相容, 你應該使用 heap functions 代替 Windows 並沒有提供 global 或 local heap GlobalAlloc = LocalAlloc near 或 far pointer 的情況 在 16-bit segmented memory model 提供 near/ far pointers 32- bit virtual memory model 一律使用 32-bit 位址 GlobalAlloc 與 LocalAlloc 一律傳回 32-bit virtual address GlobalAlloc / LocalAlloc 配置的空間 private, committed pages with read/write access Copy-On-Write Windows支援一個機制, 讓兩個以上的 processes 共享同一個記憶體區

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档