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]

在最后的输出中可以看到栈内存确实没有被还给系统,并且栈内存与堆内存不一样,其分配到的必然占用物理内存。堆内存只是会在实际使用时才占用实际物理内存。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值