分配内存时,任务管理器中的物理内存不会改变

Posted

技术标签:

【中文标题】分配内存时,任务管理器中的物理内存不会改变【英文标题】:Physical memory in task manager don't changes when momory is allocated 【发布时间】:2012-04-16 08:00:31 【问题描述】:

全部 我的程序可能存在内存问题,因此我尝试查找各种​​工具提供的有关内存使用情况的信息。为了找到原因,我也做了一些简单的实验。 在发布模式下,我添加以下代码,

pChar = new char[((1<<30)/2)];
for(int i; i < ((1<<30)/2); i++)

    pChar[i] = i % 256;

执行代码时,Windows 任务管理器中的可用物理内存不会改变。在我看来,编译器可能会删除代码以提高性能。我将变量声明为一个全局变量。它不起作用。但在调试模式下,Windows 任务管理器中的可用物理内存会按预期发生变化。我无法理解。

我还有一个问题。如果物理内存用完,新操作是否会从虚拟内存中分配内存。还是会抛出一个异常?

【问题讨论】:

【参考方案1】:

编译器确实很有可能检测到“只写”变量。由于它不是volatile,因此可以安全地消除写入,然后操作系统无需实际分配RAM。

new 只是在现代系统上分配地址空间。需要时分配物理 RAM。这通常发生在 ctor 运行时,因为它初始化了成员。但是new char当然没有ctor。

【讨论】:

谢谢。如果内存分配在虚拟内存上,程序会运行缓慢吗?是编译器还是操作系统决定的? 所有分配都是针对虚拟内存的,所以“如果在虚拟内存上慢”的问题没有意义,也不需要做出决定。 RAM 稍后由操作系统分配,并且仅在需要时分配,而不是在分配时分配。

以上是关于分配内存时,任务管理器中的物理内存不会改变的主要内容,如果未能解决你的问题,请参考以下文章

任务管理器 里那个选项是物理内存

操作系统--存储管理的任务

使用java访问任务管理器中的内存

在任务管理器中的专用工作集是啥意思

如何在 任务管理器中 查看某一个进程的cpu占用率?

高手帮我解释几个WIN7任务管理器的简单问题!