保留和提交的内存有什么区别?
我知道内存必须在提交之前保留。 当它被保留时,没有其他进程可以使用它。 但是保留的内存不计入可用的RAM。 但不是吗? 因为如果没有其他人可以使用它,那么它有什么好处呢?
还是有一些更大的区别?
在Win32环境下,“保留”意味着地址空间在请求它的进程内分配。 例如,这可以用来为一个并不是所有需要的大缓冲区预留空间,但是当它需要的时候,它需要是连续的。
保留内存根本不与其他进程交互,因为每个进程都有自己的私有地址空间。 所以“保留时没有其他进程可以使用它”的说法是没有意义的,因为进程无法正常地在另一个进程的地址空间中分配内存。
当请求保留的页面被提交时(为其分配后备存储)时,由于缺less物理内存(或页面文件),该操作可能会失败。
我喜欢查看Reserved
作为预订的地址空间,以便其他人不能分配(但我不能使用该地址的内存,因为它尚未可用)。 并Committed
将地址空间映射到物理内存以便可以使用。
我为什么要保留 ? 为什么不只是得到承诺的内存? 我有几个理由:
-
某些应用程序需要一个特定的地址范围,比如0x400000到0x600000,但是不需要内存来存储任何内容。 它被用来捕获内存访问。 例如,如果某些代码访问这个区域,它将被捕获。 (有用的原因。)
-
有些线程需要逐步扩展数据。 数据需要在一块连续的内存中。 最好不要一次性投入大量的物理记忆,因为这是不必要的,而且会是一种浪费。 内存可以被其他一些线程使用。 物理内存仅在需求时才提交。
进程虚拟内存(地址空间)和实际RAM都是不同的。 您可以拥有512MB的物理RAM,但是您的进程仍然可以处理4GB的虚拟地址空间(2GB用户空间)。进程中的每个地址都可以被视为自由,保留或在任何给定时间提交。
一个进程开始于所有的地址空闲,这意味着它们可以被自由地提交到内存或者保留以供将来使用。在任何空闲地址可以被使用之前,它必须首先被分配为保留的或提交的。 但是不需要保留,以使其被执行。
预留存储器意味着为将来的目的保留好的地址空间。 它不与物理RAM(映射到RAM地址)相关联。如提交的内存意味着它将与实际的RAM相关联,以便您可以在其中存储数据。