Add files via upload

This commit is contained in:
雾島风起時
2025-09-25 04:01:20 +08:00
committed by GitHub
parent bc2237a5d3
commit 29e0c490af
8 changed files with 316 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
### 进程和线程内存空间的关系
**进程的内存空间**
一个**进程**可以看作是一个正在运行的程序实例。操作系统为每个进程分配独立的、私有的内存空间,这通常被称为**虚拟地址空间**。这个独立的地址空间主要包括以下几个关键区域:
- **代码段**:存放可执行文件的机器指令(也就是程序的代码)。这部分通常是只读的,以防止程序在运行时修改自身代码
- **数据段**:存放已初始化的全局变量和静态变量
- **BSS 段**:存放未初始化的全局变量和静态变量
- **堆**:用于动态内存分配。程序在运行时,可以随时从堆中申请和释放内存
- **栈**:用于存放局部变量、函数参数和返回地址。栈是自动管理的,遵循先进后出(LIFO)的原则
**关键点**:每个进程都有自己独立的虚拟地址空间。这意味着,一个进程无法直接访问另一个进程的内存,除非使用进程间通信(IPC)机制。这种隔离性是操作系统的核心安全机制,可以防止一个进程的错误影响到其他进程,从而保证系统的稳定性
**线程的内存空间**
一个**线程**是进程内的一个执行单元,有时也被称为“轻量级进程”。与进程不同的是,**同一个进程内的所有线程共享该进程的内存空间**
具体来说,这些线程共享:
- **代码段**:所有线程执行的是同一份程序代码
- **数据段**:所有线程都可以访问和修改同一个进程的全局变量和静态变量
- **堆**:所有线程都可以从同一个堆中申请和释放动态内存
但是,每个线程都有自己**独立的**私有部分:
- **栈**:每个线程都有自己的私有栈,用于存放它自己的局部变量和函数调用信息。这是为了确保每个线程在执行函数时,不会影响到其他线程的执行上下文
- **寄存器**:每个线程都有自己的寄存器集合,用来保存其执行状态
可以把**进程**想象成一个**拥有独立房子的住户**,这个房子里有独立的厨房、客厅和卧室(代表私有的内存空间)。而**线程**则可以想象成**房子里的不同家庭成员**
- **进程**:拥有独立的房子(**独立的地址空间**)
- **线程**:是房子里的家庭成员。他们共享房子里的公共区域,比如**客厅(堆)**、**厨房(数据段)**,但每个人有自己的**卧室(栈)和衣柜(寄存器)**