簡體   English   中英

64 位進程中的 CreateFileMapping 大小限制

[英]CreateFileMapping size limit in a 64-bit process

文件映射object有大小限制嗎? 我問的原因是在 MSDN 的某個地方提到了 2GB 的限制(丟失了軌道..)我還檢查了這個示例,它也需要 2GB 的大小限制:

https://cpp.hotexamples.com/examples/-/-/CreateFileMapping/cpp-createfilemapping-function-examples.html

但是我在最新的 Win 10 上嘗試了一個 40GB 的文件,沒有問題,所以我有點擔心,例如,如果舊的 Windows 沒有一些限制。

文件映射沒有 2GB 的限制。 您可以使用 3GB 選項啟動 32 位 Windows,或者當 32 位進程在 64 位系統上運行時,如果設置了正確的PE 標志,您將獲得完整的 4GB。 所有這些限制都是理論上的,您在實踐中永遠無法達到它們。

map 有多大的視圖取決於兩件事;

  1. 進程地址空間中連續的空閑地址范圍。
  2. 可用 kernel memory 用於跟蹤 memory 頁面。

第一個是 32 位系統的大限制,因為進程的地址空間與系統庫、第 3 方庫(反病毒、注入的“調整”工具等)、PEB 和 TEB、系統共享區域、線程堆棧和 memory 由硬件保留。 這通常會使您的空間遠低於 2GB。 任何需要超過 500MB 的設計都應該根據需要在特定的較小范圍內更改為僅 map。

對於 64 位 Windows 上的 64 位進程,虛擬地址空間是 128 TB 范圍 0x000'00000000 到 0x7FFF'FFFFFFFFKB889654聲稱 8 TB,但僅適用於< Windows 8.1 )。 任何可用范圍都會變小,但您可以假設至少有幾個 TB。 40GB 沒問題,也不足以遇到系統資源不足的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM