【问题标题】: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 任务管理器中的可用物理内存会按预期发生变化。我无法理解。

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

【问题讨论】:

    标签: memory taskmanager


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。如果内存分配在虚拟内存上,程序会运行缓慢吗?是编译器还是操作系统决定的?
    • 所有分配都是针对虚拟内存的,所以“如果在虚拟内存上慢”的问题没有意义,也不需要做出决定。 RAM 稍后由操作系统分配,并且仅在需要时分配,而不是在分配时分配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2011-09-26
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 2017-07-31
    相关资源
    最近更新 更多