分配内存时,任务管理器中的物理内存不会改变
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 稍后由操作系统分配,并且仅在需要时分配,而不是在分配时分配。以上是关于分配内存时,任务管理器中的物理内存不会改变的主要内容,如果未能解决你的问题,请参考以下文章