mirror of
https://github.com/nganhkhoa/CTF-All-In-One.git
synced 2024-10-19 01:12:52 +07:00
31 lines
1.4 KiB
Markdown
31 lines
1.4 KiB
Markdown
# 内存管理
|
||
|
||
- [什么是内存](#什么是内存)
|
||
- [栈与调用约定](#栈与调用约定)
|
||
- [堆与内存管理](#堆与内存管理)
|
||
|
||
|
||
## 什么是内存
|
||
为了使用户程序在运行时具有一个私有的地址空间、有自己的 CPU,就像独占了整个计算机一样,现代操作系统提出了虚拟内存的概念。
|
||
|
||
虚拟内存的主要作用主要为三个:
|
||
- 它将内存看做一个存储在磁盘上的地址空间的高速缓存,在内存中只保存活动区域,并根据需要在磁盘和内存之间来回传送数据。
|
||
- 它为每个进程提供了一致的地址空间。
|
||
- 它保护了每个进程的地址空间不被其他进程破坏。
|
||
|
||
现代操作系统采用虚拟寻址的方式,CPU 通过生成一个虚拟地址(Virtual Address(VA))来访问内存,然后这个虚拟地址通过内存管理单元(Memory Management Unit(MMU))转换成物理地址之后被送到存储器。
|
||
|
||
![](../pic/1.5.7_va.png)
|
||
|
||
前面我们已经看到可执行文件被映射到了内存中,Linux 为每个进程维持了一个单独的虚拟地址空间,包括了 .text、.data、.bss、栈(stack)、堆(heap),共享库等内容。
|
||
|
||
32 位系统有 4GB 的地址空间,其中 0x08048000~0xbfffffff 是用户空间(3GB),0xc0000000~0xffffffff 是内核空间(1GB)。
|
||
|
||
![](../pic/1.5.7_vm.png)
|
||
|
||
|
||
## 栈与调用约定
|
||
|
||
|
||
## 堆与内存管理
|