程序在达到限制后不分配更多内存

时间:2014-01-22 04:35:02

标签: c malloc

所以我在课堂上学到了内存分配的概念,我想为什么不开发一个可以充分利用资源的程序。该计划非常简单。源代码如下 - 环境 - MS Visual Studio 2013 操作系统 - Windows 8 x64

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
char i;
char *worm;
for (i = 120; i < 130; i++)
{
    worm = (char*)malloc(sizeof(i));
}

return 0;
}

现在,我的笔记本电脑已5 GB RAM,但我发现在达到大约2 GB的值后,处理器继续工作,但内存使用量不会增加什么。那么有没有办法让完整的内存耗尽并且PC几乎无用?

请注意,我这样做仅用于教育目的:|

编辑: - 我从任务管理器中注意到的另一件事是整个可用内存被分配给程序,但程序无法获得更多内存,因为操作系统已保留它,因为它包含缓存程序。

那么,有没有办法解决完整内存并使计算机崩溃甚至非常慢?

3 个答案:

答案 0 :(得分:2)

检查malloc()的返回值,您会看到在某个时刻开始返回NULL,这意味着分配失败。

在您耗尽了一些内存资源(可能是您的进程的虚拟地址空间)之后会发生这种情况,许多32位环境限制在大约2GB。有关Windows的信息,请参阅Memory Limits for Windows Releases

答案 1 :(得分:0)

您的RAM大小可能是5GB,但其中大部分已被其他正在运行的进程或您的操作系统使用,这就是为什么可用 RAM大小约为2GB且您是无法分配更多。祝你好运:)

答案 2 :(得分:0)

目前,操作系统非常智能。特别是新的。我认为visual studio有一种处理内存泄漏的方法。根据我的个人经验,我曾经在SDL中编写过一个游戏,试图在一个循环中分配一个表面,每次迭代都会分配新的内存块。我运行了流程管理器,看到它增加到100MB并在此之后停止。但我在XP中运行了相同的程序,该程序运行了20分钟并挂了。我不得不强行关闭电源并重新启动它以使其再次工作。