簡體   English   中英

澄清虛擬內存-分配大的連續內存

[英]Virtual memory clarification - allocation of large contiguous memory

我有一個應用程序,我必須在Windows上分配很大的內存空間(數百MB)(使用operator new)。 該應用程序是32位的(即使在64位系統上,我們現在也不使用64位),並且我啟用了/ LARGEADDRESSAWARE鏈接器選項,以便能夠使用4 GB的用戶空間內存。

問題如果我需要分配,例如說450 MB的連續內存,進程的虛擬地址空間是否需要具有足夠大的連續連續空間而且物理內存不必在系統上分割? 我之所以這樣問,是因為我可以這樣做,以便我的應用程序保留足夠大的連續空間,但是不知道系統上的其他應用程序是否會以這種方式影響我。 OS頁表是否需要將應用程序看到的連續虛擬地址轉換為連續物理地址?

如果僅在您的軟件中使用內存,那么您的450MB分配將只需要在虛擬空間中留出450MB的空間。 內存系統各個角落的頁面都可以滿足[只要系統中某處至少有450MB可用空間-包括交換空間]。

如果操作系統能夠以每塊2MB的連續塊分配頁面(一次使用2MB的“大頁面”),則系統將獲得更好的性能。 但是如果需要,系統將退回到單個4KB頁面。

分頁內存體系結構的幾個好處之一是,任何物理頁都可以放在任何虛擬地址上。 在某些系統中,例如在Debug模式下的Xen虛擬化管理器,頁面是按順序故意分配的,以使系統在有關內存頁面的假設連續時更容易檢測到。

您無需擔心物理內存的連續性。 這是虛擬地址到物理地址轉換可以幫助您的一件事。 只要您可以保留一部分地址空間並用物理內存備份它,無論它在哪里,事情都將起作用。

暫無
暫無

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

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