gpt4 book ai didi

c++ - 为什么达到峰值后内存泄漏不再继续?

转载 作者:可可西里 更新时间:2023-11-01 11:13:49 27 4
gpt4 key购买 nike

我故意制造了一个内存泄漏来向即将学习指针的人展示一个观点。

int main()
{
while (1)
{
int *a = new int [2];
//delete [] a;
}
}

如果在没有注释代码的情况下运行,内存将保持低位并且不会像预期的那样增加。但是,如果按原样运行,那么在具有 2GB RAM 的机器上,内存使用量会迅速上升到大约 1.5GB,或者系统未使用的任何内存。但是,一旦达到这一点,CPU 使用率(之前是最大值)就会大大下降,内存使用率也会下降到大约 100MB。

究竟是什么导致了这个干预 Action (如果有比“Windows”更具体的东西,那就太好了),为什么程序不占用它会循环的 CPU,但也不终止?它似乎卡在循环结束和 main 结束之间。

Windows XP、GCC、MinGW。

最佳答案

可能发生的情况是您的代码分配了所有可用的物理 RAM。当达到该限制时,系统开始在交换文件上为其分配空间。这意味着它(几乎)一直在等待磁盘,因此它的 CPU 使用率下降到(几乎)为零。

系统可能很容易地跟踪它从未实际写入它分配的内存的事实,所以当它需要存储在交换文件中时,它只会做一个小记录基本上是说“进程 X 有 N 个字节的未初始化存储”,而不是实际将所有数据复制到硬盘驱动器(但我不确定,这很可能取决于您使用的确切系统)。

关于c++ - 为什么达到峰值后内存泄漏不再继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9979908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com