當主存容量為2GB時,在32位元位址匯流排的支援下,處理器可以存取的最大程式是多少?
答案1
如果您有 32 位元位址空間,那麼您可以尋址 2^32 (4Gi) 位元組的記憶體。就虛擬位址空間中執行的程式而言,我認為它沒有理由不能尋址和存取 4GiB 的空間。
這假設了一些事情,例如使用虛擬記憶體的作業系統,可能會有一些硬體 (MMU) 來協助等。所有現代的東西都支援分頁,因此它只需要擁有當前在實體記憶體中存取的 4GiB 部分。
通用答案就這麼多,現在是 Windows 和 x86 的答案。
Windows(從win2000時代開始?)確實使用虛擬記憶體和分頁。它還預設將 4Gi 位址範圍一分為二。上半部為內核,下半部為使用者程式。這對使用者程式施加了 2GiB 位址的人為限制,或者當您以特殊模式引導核心並使用 LARGEADDRESSAWARE 程式時,限制為 3GiB。
這將限制您的用戶程式。
然後是 PAE,人為地將記憶體匯流排擴展到 36 位元。 PAE 是一個醜陋的拼湊物,自從 64 位元 CPU(在過去二十年中已經很常見)以來就不再需要了。
這正在變成一個“假設”然後“回答 X”的帖子。這意味著有一個更具體的問題會很好。
答案2
理論上這將是 2GB,但其中一些將由作業系統本身保留和/或使用。
請注意,即使您在 64 位元作業系統上運行 32 位元進程,除非有意重新設計,但 32 位元進程也限制為 2GB。如果考慮 IMAGE_FILE_LARGE_ADDRESS_AWARE 重新設計,則限制變為,根據MSDN,3GB。