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

标签 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 GBRAM 但我发现在达到大约 2 GB 的值后,处理器保持正在工作,但无论如何内存使用量都不会增加。那么有什么方法可以完全占用内存并使 PC 变得几乎无用?

请注意,我这样做只是为了教育目的:|

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

那么,有什么方法可以解决内存不足而导调用脑死机甚至变慢的问题吗?

最佳答案

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

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

关于c - 程序在达到限制后不分配更多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21274255/

相关文章:

c - C中同名的外部变量和全局变量

c - 仅返回字中偶数位的函数

c - Objective-C 2.0 垃圾收集是否收集 C 结构?

c++ - 如何使用自定义 malloc 重载 "operator new"以使其调用构造函数?

C - 将最后一个设置为 NULL 时数组值消失

c - 动态地从文本文件中读取一行

从 Windows 中的命令提示符编译 C 代码?

将字符串从 .csv 文件转换为 double

ios - malloc 的数据是否在 objective-c 中归零?

无法获取段错误的原因