*ptrs[MALLOC_COUNT] = {NULL}; int count = 0; int i; printf("start. pid=%d", getpid()); getchar(); for(i=0; i<MALLOC_COUNT; ++i){ ptrs[i] = (char *) malloc(100 * 1024 * 1024); if(ptrs[i] == NULL){ printf("malloc returns NULL\n"); break; } count++; printf("malloc: p[%d] = %p", i, ptrs[i]); getchar(); } printf("total %d MB allocated", count * 100); getchar(); for(i=0; i<count; ++i){ int t; for(t=0; t<100*1024*1024; t += PAGE_SIZE){ ptrs[i][t] = 0; } printf("touch %d MB", (i+1)100); getchar(); } for(i=0; i<count; ++i){ free(ptrs[i]); } return 0; } 100MBずつ20回malloc 失敗したらbreak 確保できたらアドレスを表示 確保した合計を表示 確保した領域に書き込み 書き込んだ領域のサイズ表示 メモリ解放