I wrote a small program to understand the difference between the VSZ and RSS. If you malloc, it only means that you can use the memory address. No real memory will be used until that page is accssed.
First I find out my page size using:
%getconf PAGE_SIZE
4096
(1)
size_t length=0x10000000; //256M ~const size_t pagesize=4096;
char* x=(char*)malloc(length);
after start the program:
%ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 25125 0.0 0.0 273552 912 pts/1 S+ 10:54 0:00 a.out
Here the VSZ just mean the maxium address space you can use, and the real memory RSS is still 912K although the VSZ is 270M
(2) and then execute
for (int i=0; i<1000; i++)
x[i]='a';
%ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 25395 0.0 0.0 273552 916 pts/1 S+ 10:56 0:00 a.out
Only one page is written, so the RSS just changed for an extra one page space (916K now).
(3) and then execute to write/read one character in 1000 pages
for (int i=0; i<1000; i++)
x[i*pagesize]='a';
%ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 25285 0.0 0.2 273552 4912 pts/1 S+ 10:55 0:00 a.out
Now every page written/read will be come the RSS (1000*4K+912K=4912K).
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment