最近我遇到了在使用一個C應用程序的時候出現了'Oops,Spwan錯誤,無法分配內存'的問題。C程序,奇怪的行爲
爲了更好地理解文件描述符和內存管理,我試了一下這個示例程序,它給了我震驚的結果。
這是代碼。
#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。
但是這個程序必須通過吃掉內存崩潰或者它應該給出錯誤'不能派生孩子',但它工作。
所以只是想知道它爲什麼不崩潰,爲什麼它沒有給出子錯誤,因爲它達到了文件描述符限制。
總是檢查返回值! – qrdl
向您分配給循環的內存添加寫入。你應該看到不同之處。但要小心,一段時間後,您的系統可能真的很難進入。 –
與您的問題無關,但將'argc'和'argv'縮寫爲'ac'和'av'會使您的代碼難以閱讀,且無法獲得補償。如果你不打算使用它們,只需聲明'int main(void)'。 –