
-----------------------------------
Thoerin
Tue Sep 02, 2008 4:47 pm

malloc question
-----------------------------------
Could anyone explain why this program never seems to use more than ~90kB of memory (When checking with gnome-system-monitor, top, etc)?  The pointer returned is not NULL when I pass a number less than the amount of free memory.


#include 
#include 


int main(int argc, char *argv[]){
		
        if(argc != 2)
        {        
                  printf("Usage: leak [Number of MB to allocate]\n");
                  return 1;
        }
	
        unsigned int megabytes;
	
        sscanf(argv[1], "%u", &megabytes);

        unsigned char *pointer = 0;
		
        pointer = malloc(megabytes * 1000000 * sizeof(unsigned char));
        printf("Allocation complete.\n");
        printf("%X", pointer);
        int tmp = getchar();	
	
        return 0;	
	
}


-----------------------------------
wtd
Tue Sep 02, 2008 4:56 pm

RE:malloc question
-----------------------------------
Compiler optimization?  Your compiler is realizing that you never actually use the memory allocated, so it doesn't bother to allocate any?

-----------------------------------
Thoerin
Tue Sep 02, 2008 5:06 pm

Re: malloc question
-----------------------------------
Hmmmm I tried compiling with -O0 before posting and it didnt help.

Just fixed it by setting to all zeros using memset, so I guess it was the optimizations after all.

Thanks for helping me out  :) .

-----------------------------------
btiffin
Wed Sep 03, 2008 2:22 am

RE:malloc question
-----------------------------------
Kinda.  malloc usually reserves pages.  They won't physically load until needed.  Complex stuff, but read http://en.wikipedia.org/wiki/Paging for a little background.

The vmstat utility may show you a better picture of what is going on.

When you really care to see what a compiler may be doing in terms of optimization, use a -S switch (for gcc that is) and take a boo at the assembler output.  The .s files rarely lie or hide anything from you; plus it can be a real eye opener exercise.  I'm occasionally amazed at how little assembler some complex operations can actually take.  Or vice versa, how some C source becomes a nearly unmanageable morass of assembler code to trace through by hand.

Cheers

-----------------------------------
wtd
Wed Sep 03, 2008 2:35 am

RE:malloc question
-----------------------------------
Well yeah, when you're coding to god-awful complicated CPU architectures...
