2014/02/10(月)mallocはどのメモリを消費するのか
x86-64bit, v3.5では、AnonPagesに使用され、buddyinfoでは切り崩されていく様子が見える。
psコマンドでRSSが肥大化していることもわかるので、トレースできている。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #define BLKSIZE 4096 #define BLKCOUNT (1024 * 1024 * 1024 / BLKSIZE) int main() { int i; int* p; fprintf(stderr, "We will allocate 1GB...\n"); sleep(30); for (i=0; i<BLKCOUNT; ++i) { p = (int*)malloc(BLKSIZE); *p = 0; } fprintf(stderr, "allocated BLKSIZE=%d, count=%d\n", BLKSIZE, i); sleep(30); fprintf(stderr, "exit...\n"); return 0; } /* sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches \ && free > free.before \ && cat /proc/meminfo > meminfo.before \ && cat /proc/slabinfo > slabinfo.before \ && cat /proc/buddyinfo > buddyinfo.before \ && cat /proc/$(pgrep a.out)/smaps > smaps.before \ && cat /proc/$(pgrep a.out)/maps > maps.before' ps -eFwl sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches \ && free > free.after \ && cat /proc/meminfo > meminfo.after \ && cat /proc/slabinfo > slabinfo.after \ && cat /proc/buddyinfo > buddyinfo.after \ && cat /proc/$(pgrep a.out)/smaps > smaps.after \ && cat /proc/$(pgrep a.out)/maps > maps.after' ps -eFwl */