#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

typedef unsigned int uint;

typedef struct {
	char  *id;
        void  *adr;
} data;

char *ptr;
data  mem[64], tmp;
int   max = 0;
char  bfr[64];

void proc( int x, int*y)
{
int l;
mem[max].id = "&x"; mem[max].adr = &x; max++;
mem[max].id = "&y"; mem[max].adr = &y; max++;
mem[max].id = "&l"; mem[max].adr = &l; max++;
mem[max].id = " y"; mem[max].adr = y; max++;
}

int main(void)
{
int i, j;

mem[max].id = "& max"; mem[max].adr = & max; max++;
mem[max].id = "& mem"; mem[max].adr = & mem; max++;
mem[max].id = "& ptr"; mem[max].adr = &ptr; max++;
mem[max].id = "  ptr (non alloue)"; mem[max].adr = ptr;  max++;

proc( max, &max);

ptr = (char*) malloc(1024);

mem[max].id = " ptr (alloue)"; mem[max].adr = ptr;  max++;

for( i = 0; i < max; i++)
   for( j = i+1; j < max; j++)
     if ( mem[i].adr > mem[j].adr ){
			tmp = mem[i];
			mem[i] = mem[j];
			mem[j] = tmp;
     }

for( i = 0; i < max; i++ )
	printf("\n%-12p : %12u : %s", mem[i].adr, (uint) mem[i].adr, mem[i].id);

printf("\n\nZones memoires :\n");
sprintf(bfr, "cat /proc/%d/maps | grep -v so", getpid() );
system( bfr );
printf("\n");
return 0;
}
