gpt4 book ai didi

C 程序,奇怪的行为

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:17 24 4
gpt4 key购买 nike

最近我在使用一个 C 应用程序时遇到了“糟糕,Spwan 错误,无法分配内存”的问题。

为了更好地理解文件描述符和内存管理,我尝试了这个示例程序,它给了我令人震惊的结果。

这是代码。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int ac, char *av[]);

int main(int ac, char *av[])
{
int fd = 0;
unsigned long counter=0;
while (1)
{
char *aa = malloc(16384);
usleep(5);
fprintf(stderr,"Counter is %ld \n", counter);
fd = fopen("/dev/null",r")
}

return 0;
}

在示例程序中,我尝试每 5 微秒分配一次内存,同时打开一个文件描述符。

现在,当我运行该程序时,它开始增加内存,文件描述符星号也在增加,但内存增加了 82.5%,文件描述符增加了 1024。我知道“ulimit”设置了这个参数,默认情况下它是 1024。

但是这个程序必须通过占用内存而崩溃,否则它会给出错误“无法生成 child ”,但它正在运行。

所以只是想知道为什么它没有崩溃以及为什么它在达到文件描述符限制时没有给出子错误。

最佳答案

它没有崩溃可能是因为当 malloc() 发现没有更多的内存可以分配和返回时,它只是返回 NULL。同样,open() 也只返回一个负值。换句话说,你的操作系统和标准库的合作比它让你的程序崩溃更聪明。

关于C 程序,奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16798051/

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