I want to test how much the OS does allocate when I request 24M memory.
for (i = 0; i < 1024*1024; i++)
ptr = (char *)malloc(24);
When I write like this I get RES is 32M from the top command.
ptr = (char *)malloc(24*1024*1024);
But when I do a little change the RES is 244. What is the difference between them? Why is the result 244?
The second allocation barely touches the memory. The allocator tells you “okay, you can have it” but if you don’t actually touch the memory, the OS never actually gives it to you, hoping you’ll never use it. Bit like a Ponzi scheme. On the other hand, the other method writes something (a few bytes at most) to many pages, so the OS is forced to actually give you the memory.
Try this to verify, you should get about 24m usage:
In short, top doesn’t tell you how much you allocated, i.e. what you asked from
malloc. It tells you what the OS allocated to your process.