为了账号安全,请及时绑定邮箱和手机立即绑定

malloc可以分配的最大内存

malloc可以分配的最大内存

C
慕后森 2019-10-18 14:37:24
我试图找出我的机器(1 Gb RAM 160 Gb HD Windows平台)上可以最大程度地分配多少内存。我读到malloc可以分配的最大内存被限制为物理内存(在堆上)。同样,当程序超出一定程度的内存消耗时,计算机也会停止工作,因为其他应用程序无法获得所需的足够内存。为了确认,我用C语言编写了一个小程序:int main(){      int *p;    while(1){        p=(int *)malloc(4);        if(!p)break;    }   }我希望有一段时间内存分配失败并且循环中断,但是我的计算机挂起了,因为它是一个无限循环。我等待了大约一个小时,最后我不得不强行关闭计算机。一些问题:malloc也从HD分配内存吗?出现上述行为的原因是什么?为什么在任何时候都没有循环中断?为什么没有分配失败?
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

我读到malloc可以分配的最大内存被限制为物理内存(在堆上)。


错误:大多数计算机/操作系统都支持虚拟内存,并以磁盘空间为后盾。


一些问题:是否malloc也从HDD分配内存?


malloc 询问操作系统,操作系统可能会占用一些磁盘空间。


出现上述行为的原因是什么?为什么循环没有随时中断?


为什么没有分配失败?


您一次只请求了很少的请求:循环最终将中断(很久之后,由于虚拟内存和物理内存的大量过量以及随之而来的超频繁磁盘访问,您的计算机速度下降,这称为“崩溃”问题”),但在此之前您筋疲力尽。尝试一次获取一个兆字节。


当程序超出一定程度的内存消耗时,计算机将停止工作,因为其他应用程序无法获得所需的足够内存。


完全停止是不可能的,但是当通常需要几微秒的操作最终要花费(例如)数十毫秒时,这四个数量级肯定会使人感觉好像计算机已经基本停止了,并且通常需要花费什么时间一分钟可能要花一个星期。


查看完整回答
反对 回复 2019-10-18
?
四季花海

TA贡献1811条经验 获得超5个赞

malloc它自己执行内存管理,自己管理小内存块,但最终它使用Win32 Heap函数分配内存。您可以将其malloc视为“内存经销商”。


Windows内存子系统包括物理内存(RAM)和虚拟内存(HD)。当物理内存不足时,可以将某些页面从物理内存复制到硬盘驱动器上的虚拟内存。Windows透明地执行此操作。


默认情况下,虚拟内存处于启用状态,并将占用HD上的可用空间。因此,测试将继续运行,直到为该进程分配了全部虚拟内存(32位窗口上为2GB)或填满了硬盘。


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 1174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信