代码如下:
#include <stdlib.h> #include <stdio.h> #include <unistd.h> int num = 100; pid_t pid; char cmd_buf[256]; void foo_func() { char foo_buf[1024]; if( num > 0 ) { --num; system( cmd_buf ); foo_func(); } } int main( int argc, char** argv ) { pid = getpid(); sprintf( cmd_buf, "cat /proc/%d/maps | grep stack", pid ); system( cmd_buf ); foo_func(); system( cmd_buf ); return 0; }
结果如下:
bfa7e000-bfa94000 rw-p bfa7e000 00:00 0 [stack]
...
bfa7b000-bfa94000 rw-p bfa7b000 00:00 0 [stack]
...
bfa77000-bfa94000 rw-p bfa77000 00:00 0 [stack]
bfa77000-bfa94000 rw-p bfa77000 00:00 0 [stack]
bfa77000-bfa94000 rw-p bfa77000 00:00 0 [stack]
在最后的输出中可以看到栈内存确实没有被还给系统,并且栈内存与堆内存不一样,其分配到的必然占用物理内存。堆内存只是会在实际使用时才占用实际物理内存。