7.内存性能问题-linux内存原理

本文深入剖析Linux内存管理系统,涵盖物理内存与虚拟内存的关系、MMU的作用、进程内存空间布局,以及内存分配回收机制。详细讲解了malloc(), brk()和mmap()的工作原理,并探讨了系统如何通过LRU算法、内存交换和进程终止策略来应对内存紧张状况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux内存工作原理

  • 物理内存-虚拟内存-MMU之间的关系
  • 进程内存用户空间-内核空间
  • 内存分配与回收机制
  • 内存查看相关指标

 

虚拟内存空间分布首先,我们需要进一步了解虚拟内存空间的分布情况。最上方的内核空间不用多讲,下方的用户空间内存,其实又被分成了多个不同的段。以 32 位系统为例,我画了一张图来表示它们的关系。通过这张图你可以看到,用户空间内存,从低到高分别是五种不同的内存段。只读段,包括代码和常量等。数据段,包括全局变量等。堆,包括动态分配的内存,从低地址开始向上增长。文件映射段,包括动态库、共享内存等,从高地址开始向下增长。栈,包括局部变量和函数调用的上下文等。栈的大小是固定的,一般是 8 MB。

内存分配与回收

malloc() 是 C 标准库提供的内存分配函数,对应到系统调用上,有两种实现方式,即 brk() 和 mmap()。

对小块内存(小于 128K),C 标准库使用 brk() 来分配,也就是通过移动堆顶的位置来分配内存。这些内存释放后并不会立刻归还系统,而是被缓存起来,这样就可以重复使用。

而大块内存(大于 128K),则直接使用内存映射 mmap() 来分配,也就是在文件映射段找一块空闲内存分配出去。这两种方式,自然各有优缺点。

系统也不会任由某个进程用完所有内存。在发现内存紧张时,系统就会通过一系列机制来回收内存,比如下面这三种方式:

回收缓存,比如使用 LRU(Least Recently Used)算法,回收最近使用最少的内存页面;

回收不常访问的内存,把不常用的内存通过交换分区直接写到磁盘中;

杀死进程,内存紧张时系统还会通过 OOM(Out of Memory),直接杀掉占用大量内存的进程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值