/* * This program tries to allocate as much memory as possible, then writes * to every page of it. * * To compile in normal mode: * * gcc -o eatmem eatmem.c * * To compile in sbrk() mode: * * gcc -DUSE_SBRK -o eatmem eatmem.c * * */ #include #include #include #include #include #include long getvalue(char *fname,char *field){ char s[129],*p; FILE *f; f=fopen(fname,"rt"); if(!f) return -1; while(fgets(s,129,f)){ p=strchr(s,':'); if(p){ *p=0; if(!strcmp(s,field)){ p++; fclose(f); return atol(p); } } } fclose(f); return -1; } int main(int argc, char **argv, char **env){ int p[2],n; unsigned long l,l1; long swapfree,swapfreemin; char *p0,*p1,*p2; pid_t pid; printf("Platform: pointer is %ld bits, int is %ld bits, long is %ld bits\n", (long)(sizeof(void*)*8),(long)(sizeof(int)*8),(long)(sizeof(long)*8)); if(pipe(p)){ perror("pipe"); return 1; } if((pid=fork())<0){ perror("fork"); return 1; } if(pid==0){ close(p[0]); #ifdef USE_SBRK p0=(char*)sbrk(0); p1=p0-1; l=0; while ((long)(p2=(char*)sbrk(4096))!=-1L){ p1=p2+4096; } #else p0=malloc(1); if(!p0) return 1; unsigned long s=0; while((p2=realloc(p0,s+4096))){ s+=4096; p0=p2; p1=p2+s; } #endif if(p1>p0) l=((unsigned long)(p1-p0))/1024UL; write(p[1],&l,sizeof(unsigned long)); for(p2=p0;p2