gpt4 book ai didi

c - malloc 可以分配的最大内存

转载 作者:太空狗 更新时间:2023-10-29 16:19:51 26 4
gpt4 key购买 nike

我试图弄清楚我可以在我的机器上最大程度地 malloc 多少内存(1 Gb RAM 160 Gb HD Windows 平台)。

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

此外,当某个程序的内存消耗超过一定水平时,计算机会停止工作,因为其他应用程序无法获得所需的足够内存。

为了确认,我用 C 写了一个小程序:

int main(){  
int *p;
while(1){
p=(int *)malloc(4);
if(!p)break;
}
}

我希望有一段时间内存分配会失败并且循环会中断,但我的计算机挂了,因为它是一个无限循环。

我等了大约一个小时,最后我不得不强行关闭我的电脑。

一些问题:

  • malloc 是否也从 HD 分配内存?
  • 上述行为的原因是什么?
  • 为什么循环在任何时候都没有中断?
  • 为什么没有分配失败?

最佳答案

I read that the maximum memory malloc can allocate is limited to physical memory (on heap).

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

Some questions: does malloc allocate memory from HDD also?

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

What was the reason for above behavior? Why didn't the loop break at any time?

Why wasn't there any allocation failure?

您只是一次要求的太少:循环最终会中断(在您的机器由于虚拟内存与物理内存的大量过剩以及随之而来的超频繁磁盘访问而慢到爬行之后,这是一个众所周知的问题作为“thrashing”)但在那之前它已经耗尽了你的耐心。尝试获取例如一次一兆字节。

When a program exceeds consumption of memory to a certain level, thecomputer stops working because other applications do not get enoughmemory that they require.

完全停止是不太可能的,但是当通常需要几微秒的操作最终需要(例如)几十毫秒时,这四个数量级肯定会让它感觉好像计算机基本上已经停止,通常需要一分钟的时间可能需要一周时间。

关于c - malloc 可以分配的最大内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2798330/

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