18

ここで説明したように、キャッシュの目的で大量のメモリを必要とするアプリケーションを作成しています。今、私はそれをどのように実現できるかを理解するために、いくつかの malloc / new 構造をいじっています。私は奇妙な観察をしました:

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

int main(void) {
  while(1) {
    char *foo = (char*)malloc(1024);// new char[1024];
    if(foo == NULL) { 
      printf("Couldn't alloc\n");
      fflush(stdout);
      return 0;
    }
  }
  return 0;
}

そのprintfに到達しないのはなぜですか? システムのメモリが不足すると、ここで説明されているように、malloc は NULL を返すと言われています。しかし、私は常に SIGKILL を受け取ります (私は Linux を使用しています...)。

4

4 に答える 4

4

mallocNULL要求された割り当てを満たすことができない場合に返されます。しかし、ヒープから大量のスペースを割り当ててみるべきかもしれません。

ここを参照してください。

Linux で malloc() を呼び出したときにエラーが発生する唯一の方法は、メモリ オーバーコミットを無効にすることです。通常の Linux システムでは、これが malloc() が NULL を返す唯一の方法です。icecast プロセスがそのポイントに達した場合、意味のあることは何もできなくなります。ソースの読み取りは失敗し (refbuf alloc)、ログ出力も失敗します (printf も malloc を使用します)。あきらめて、abort() を呼び出します。

于 2013-05-21T16:00:46.527 に答える