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

时间:2012-04-16 08:00:32

标签: memory taskmanager

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

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

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

我有另一个问题。如果物理内存耗尽,新操作是否会从虚拟内存中分配内存。或者会抛出一个例外?

1 个答案:

答案 0 :(得分:0)

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

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