在阅读《嵌入式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]
在最后的输出中可以看到栈内存确实没有被还给系统,并且栈内存与堆内存不一样,其分配到的必然占用物理内存。堆内存只是会在实际使用时才占用实际物理内存。
分享到:
相关推荐
---------------------------------------------------Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
LinuxMemoryManagement linux 进程内存管理
Linux 下C++共享内存、信号量封装,实现进程同步
加深对进程概念的理解,明确进程和程序的区别. 进一步认识并发执行的实质. 分析进程争用资源的现象,学习解决进程互斥的方法. 了解Linux系统中进程通信的基本原理
linux c下的多进程例子,使用共享内存进行通信,一个进程写一个进程读。
某银行的进程池管理代码,,Unix/linux进程池管理
Linux0.11 下的内存管理
ARM LINUX 进程间通讯 共享内存 ;可以实现多个不同程序通讯而不是仅仅实现父子进程通讯!
linux内存管理 linux内存管理 linux内存管理
Linux Kernel核心中文手册 Software Basic( 软件基础 ) Memory Management (内存管理) linux Processes (进程) Interprocess Communication Mechanisms (进程间通讯机制) 等等核心技术讲解
Linux进程管理和网络管理
Linux中进程创建和内存空间申请: 除进程0外,所有进程都是由一个已有进程在用户态下完成创建的。 进程0创建进程1前,要将进程0由内核态转变为用户态,方法是调用move_to_user_mode函数 硬件对5个push压栈的数据分别...
无亲缘关系多进程,使用互斥同步锁实现内存共享。
Linux环境进程间通信(五) 共享内存(上)
Linux虚拟内存管理.pdf
Linux2.6协议栈源代码分析,这是一本介绍协议栈源代码的书,值得一读
堆内存和栈内存详解.doc 堆内存和栈内存详解.doc 堆内存和栈内存详解.doc
linux进程管理实验 父进程和子进程的内存映像
很简单, 监控linux某进程内存的脚本
内存管理方面x86,LINUX下的内存管理方式 很好的资料大家看看啊