读书人

Linux上进程栈内存管理的一点细节

发布时间: 2012-07-29 15:26:14 作者: rapoo

Linux下进程栈内存管理的一点细节
在阅读《嵌入式linux性能详解》时,提到Linux系统中进程栈所使用的物理内存只会增长,不会减少,实际验证了一下,在2.6.22的内核下:
代码如下:

#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]

在最后的输出中可以看到栈内存确实没有被还给系统,并且栈内存与堆内存不一样,其分配到的必然占用物理内存。堆内存只是会在实际使用时才占用实际物理内存。

读书人网 >UNIXLINUX

热点推荐