`
mypyg
  • 浏览: 549658 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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]

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

相关推荐

    内存管理方面x86,LINUX下的内存管理方式

    在IT领域,内存管理是操作系统的核心组成部分,尤其是在x86架构下的Linux系统中。内存管理不仅关乎系统的性能,还直接影响到程序的运行效率和稳定性。本文将深入探讨x86架构下Linux系统的内存管理机制。 首先,x86...

    linux环境下的内存管理

    在Linux环境下,内存管理是操作系统的核心组成部分,它涉及到数据的高效存储、内存的释放以及对内存资源的优化利用。理解Linux内存管理对于系统的性能优化和问题排查至关重要。 ### 前言 Linux内存管理旨在确保多...

    理解Linux进程的内存使用量

    本文将深入探讨Linux进程内存使用的核心概念,以及如何正确解读`ps`命令提供的VSZ和RSS指标。 首先,我们来看一下Linux内存模型。Linux内存管理采用了虚拟内存的概念,这意味着每个进程都有自己的虚拟地址空间,它...

    深入理解Linux虚拟内存管理

    本文将详细介绍Linux虚拟内存管理机制,包括物理内存的描述、页表管理、进程地址空间、启动时内存分配器、物理页面分配、非连续内存分配、slab分配器以及高内存管理等核心概念和技术细节。 #### 物理内存描述 物理...

    glibc内存管理ptmalloc源代码分析@华庭1

    2.1 X86平台Linux进程内存布局 在X86架构的Linux系统中,进程的内存布局分为几个主要区域:代码段、数据段、堆、栈和虚拟内存映射区域。在32位模式下,经典的进程内存布局将栈和堆分别位于地址空间的高和低部分,而...

    linux内核细节描述

    3. **内存管理**:Linux内核采用虚拟内存机制,使得每个进程都有独立的地址空间,增强了系统的安全性。它还实现了内存分页和内存碎片整理,以优化内存使用。 4. **文件系统**:Linux内核支持多种文件系统,如EXT4、...

    Linux的进程管理(一)(ppt文档).ppt

    本节主要介绍了Linux中进程、线程和轻量级进程的基本概念,以及与之相关的进程描述符、进程状态转换、PID的管理和进程内核栈等方面的知识。 首先,进程是程序执行的一个实例,它具有动态性,表现为有限状态机的迁移...

    《深入解析Linux内存管理》

    - **内核架构**:熟悉Linux内核架构有助于理解内存管理的具体实现细节。 #### 二、页表管理 Linux中的页表管理主要包括两个步骤: 1. **逻辑地址转线性地址**:在x86保护模式下,处理器使用段寄存器和段描述符来...

    内存管理与调试详细剖析

    在32位模式下,Linux进程的虚拟地址空间通常被划分为几个部分:代码段、数据段、堆、栈和未初始化的数据段。这些部分按照一定的顺序排列,形成了进程的内存布局。具体来说: - **代码段**:存放程序的机器指令。 - ...

    glance, top和ps察看进程内存数据之间的关系及计算

    在Linux系统监控中,了解进程内存使用情况是十分重要的,特别是在优化系统性能和排查问题时。glance、top和ps都是常用的系统监控工具,它们分别提供了不同层面的内存使用信息。这里我们将深入探讨这些工具查看内存...

    Linux的进程管理(一)-(1)(ppt文档).ppt

    【Linux的进程管理】是操作系统领域中的核心概念之一,尤其...以上内容只是Linux进程管理的冰山一角,实际上还包括更多细节,如调度策略、信号处理、同步机制等。理解和掌握这些知识对于理解和优化Linux系统至关重要。

    glibc内存管理ptmalloc源代码分析4.pdf

    在X86平台上,Linux进程的内存布局通常分为几个区域:代码段、数据段、堆、栈和共享库。其中,堆区域由ptmalloc管理,用于动态内存分配。 - **32位模式下的经典布局**:代码段和数据段位于低地址空间,栈从高地址向...

    【案例分析】如何分析linux下被破坏的栈

    ### 知识点一:Linux下的栈空间布局与管理 #### 栈空间的基本概念 在Linux环境下,程序的运行依赖于各种内存区域的合理分配与使用,其中栈(Stack)作为程序运行时的一个重要组成部分,主要用于存储函数调用时的...

    linux虚拟内存1/2

    本篇文章通过韩国汉阳大学教授出品的关于Linux虚拟内存管理的文档介绍了Linux中的虚拟内存概念以及其实现细节。通过对过程地址空间的理解,我们了解了何时以及为什么进程需要内存;通过虚拟内存区域的概念,我们了解...

    大内高手(基于linux的内存模型)

    Linux内存模型是操作系统中至关重要的一部分,它定义了内存如何被分配、管理和访问。了解这个模型对于优化程序性能、排查内存问题以及理解系统资源的使用至关重要。以下是对Linux内存模型的详细阐述: 1. **地址...

Global site tag (gtag.js) - Google Analytics