On 2002.12.20 Ralf Hildebrandt wrote:
>Hi!
[real problem snipped]
>
>Then we wrote a program which allocates large amounts of memory:
>
>--- snip ---
>#include <stdlib.h>
>#include <stdio.h>
>
>main(){
> char *buf;
> long c;
> FILE *fp;
>
> fp = fopen("/dev/null","a");
> while(1){
> buf = (char *)malloc(100000000);
> c = random();
> if (c > 100000000)
> continue;
> fprintf(fp,"%c",buf[c]);
> printf("hier\n");
> }
>}
>--- snip ---
>
>And we found that this program will be killed with a SIGSEGV as well.
>
Normal. You are running OOM. Look at what you do:
while (1)
{
malloc(much mem)
// do not free the mem !!!!
}
So in a couple steps you are OOM.
I suppose what you want to do is
buf = malloc(...)
while (1)
touch random page
But...you 'touch' is read-only (the printf), so the page will never
really be allocated. Try with this:
#include <stdlib.h>
// 4Gb
#define SZ 4*1024*1024*1024
main(){
char *buf;
buf = malloc(SZ);
if (!buf)
{
perror("bad try");
exit(1);
}
while(1){
buf[random()%SZ] = 0;
}
}
Ah, with 2Gb of ram you will need to compile with 3Gb userspace,
to let a one only process allocate a chunk of mem that does not fit
into core memory. Or, easier, run several instances...
-- J.A. Magallon <jamagallon@able.es> \ Software is like sex: werewolf.able.es \ It's better when it's free Mandrake Linux release 9.1 (Cooker) for i586 Linux 2.4.20-jam2 (gcc 3.2 (Mandrake Linux 9.1 3.2-4mdk)) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Mon Dec 23 2002 - 22:00:28 EST