最近我在使用一个 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。
但是这个程序必须通过吃掉内存而崩溃,否则它应该给出错误'不能产生孩子',但它正在工作。
所以只是想知道为什么它没有崩溃以及为什么它在达到文件描述符限制时没有给出子错误。