所以我被教导了班级中的内存分配概念,我认为为什么不开发一个可以很好地养活资源的程序。该程序非常简单。源代码在下面 - 环境-MS Visual Studio 2013OS- 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;
}
现在,我的笔记本电脑已经获得了RAM
的5 GB
,但是我看到,在达到2 GB
左右的值后,处理器继续工作,但是无论如何,内存使用量不会增加。因此,有什么方法可以使完整的内存被刺穿,并且PC几乎没有用?
请注意,我仅出于教育目的而这样做:|
编辑: - 我从任务管理器中注意到的另一件事是,整个免费内存都分配给了程序,但是该程序无法获得更多内存,因为OS已保留它,因为它包含了缓存的程序。
那么,有什么方法可以解决完整的内存并使计算机崩溃甚至非常慢?
检查malloc()
的返回值,您会发现某个时候开始返回NULL
,这意味着分配失败了。
这在您用尽了一些内存资源后,可能是过程的虚拟地址空间,这是许多32位环境仅限于大约2GB。有关Windows的信息,请参见Windows版本的内存限制。
您的RAM大小可能是5GB,但是大多数已由其他运行过程或操作系统使用,这就是为什么可用RAM大小约为2GB,您无法分配更多。祝你好运:)
这些天操作系统是智能的。特别是新的。我认为Visual Studio具有一种处理内存泄漏的方式。根据我的个人经验,我曾经在SDL上写了一场游戏,试图在循环中分配一个表面,该表面一直在每次迭代中不断分配新的记忆块。我经营了流程经理,看到它增加了TIL 100MB并在此之后停止。但是我在XP中运行了相同的程序,该程序跑了20分钟并悬挂了。我必须强行将电源插入并重新启动以使其再次工作。