2011-03-19 45 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

相关问题