进程在内存中是什么样子的?
operating systemwindowsmca更新于 2026/3/5 8:37:17
加载到内存并执行的程序称为进程。简单来说,进程就是正在执行的程序。
程序创建时,它只是一些字节片段,作为被动实体存储在硬盘中。然后,当在 Windows 中双击程序或在命令行中输入可执行文件的名称时,程序开始加载到内存中并成为主动实体。 (例如 a.out 或 prog.exe)
让我们来看看每个内存段,以及进程在内存中是什么样子的 −

图:内存中的进程
文本
进程不仅仅是程序代码,代码段也被称为文本段。这部分内存包含程序的可执行指令。它还包含常量、宏,并且它是一个只读段,以防止指令被意外修改。它也是可共享的,以便其他进程可以在需要时使用它。
数据
下一个数据段内存段包含程序员在程序执行前初始化的全局变量和静态变量。此段不是只读的,因为变量的值可以在运行时更改。
C 程序示例 −
#include<stdio.h>
int b;//将存储在数据段
int main(){
static int a; //将存储在数据段
return;
}
堆
为了给那些在程序执行前无法由编译器静态确定大小的变量分配内存,程序员需要动态分配内存,该内存在堆段中完成。只能在运行时确定。它通过 malloc、calloc、free、delete 等系统调用进行管理。一个 C 语言示例:malloc(2) 返回堆区域中 2 字节块的起始地址。
堆栈
进程通常还包含进程堆栈,其中包含临时数据,例如函数参数、返回地址和局部变量。在标准 x86 架构上,它向下向低地址增长,但在某些其他架构上,它可能反向增长。如图所示,堆栈的增长方向与堆的方向相反,以避免重叠问题。本节致力于存储程序中函数调用所需的所有数据。
堆栈指针寄存器用于跟踪栈顶,即当前进程使用了多少堆栈区域,并且每次将值"压入"堆栈时,该寄存器都会被修改。如果堆栈指针与堆指针相遇,则可用的空闲内存将被耗尽。