2011-03-19 64 views
1

我想寫一個自定義的內存管理器和現在我分配的字節像一個全局數組:物理和虛擬內存visual C++之間的區別?

char g_retail_memory[512*MB]; 

當我再看看在Windows 7的資源,監視它的報告,圍繞512 MB的虛擬內存已被分配。有人可以請解釋爲什麼我沒有得到物理內存?如果我使用malloc()而不是物理內存。難道我做錯了什麼?在那種情況下,有沒有一種在visual C++下獲取物理內存的正確方法?

+0

你怎麼確定你正在用malloc獲得「物理內存」? – Mat 2011-03-19 19:14:17

+0

就像我決定沒有得到它...... :)通過Windows資源管理器,但正如我在下一篇文章中所瞭解到的,這些信息可能不正確:) – abbec 2011-03-19 20:36:05

回答

2

http://en.wikipedia.org/wiki/Virtual_memory

你分配也將是虛擬內存中的所有物理內存,因爲虛擬機是系統出現內存在現代操作系統中應用程序的方式。你可能看不到某些分配的原因可能是內存從未被使用過,所以操作系統實際上並不需要爲它尋找物理內存,但是當/如果內存被第一次使用時,它將會被找到。

請注意,如果操作系統需要其他應用程序,虛擬內存的後備物理內存可以稍後「消失」。這有時被稱爲「交換」或「分頁」。

+0

啊好吧!我懂了。那麼我所做的是預先分配內存是否正確? – abbec 2011-03-19 19:23:52

+0

如果是我,我會使用malloc,只是因爲在這樣的數組中請求512 MB是很多的,並且系統無法報告分配失敗而不是終止程序。而使用malloc你至少可以檢測到大的前期分配失敗(malloc返回NULL)。 – 2011-03-19 19:53:17

+0

Okok ...我使用Jason Gregory的遊戲引擎架構作爲參考,他說全球字節數組有效地從可執行文件BBS段中分配。但我同意你的觀點,很難發現錯誤... – abbec 2011-03-19 20:25:52