美文网首页
Linux 内存管理:内存分配

Linux 内存管理:内存分配

作者: 贪睡的企鹅 | 来源:发表于2019-07-19 12:23 被阅读0次

分配时机

当系统创建一个进程会调用exec函数,为进程做内存映射,分配内存。

2 核心流程

2.1 load_elf_binary

load_elf_binary函数用来读取二进制文件创建内存映射,其内部存在如下步骤

  • 调用 setup_new_exec,设置内存映射区 mmap_base;

  • 调用 setup_arg_pages,设置栈的 vm_area_struct,这里面设置了 mm->arg_start 是指向栈底的,current->mm->start_stack 就是栈底;

  • elf_map 会将 ELF 文件中的代码部分映射到内存中来;

  • et_brk 设置了堆的 vm_area_struct,这里面设置了 current->mm->start_brk = current->mm->brk,也即堆里面还是空的;

  • load_elf_interp 将依赖的 so 映射到内存中的内存映射区域。

2.2 调用malloc申请内存
  • 使用malloc 申请一小块内存调用brk函数在堆中分配

  • 使用malloc 申请一大块内存调用mmap函数在映射区分配

3 内存不足时的处理

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

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

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

相关文章

  • Linux 内存管理:内存分配

    分配时机 当系统创建一个进程会调用exec函数,为进程做内存映射,分配内存。 2 核心流程 2.1 load_el...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

  • JVM 内存管理

    内存管理=内存分配+内存回收 内存分配 JMM指Java内存管理线程之间的共享变量存储在主内存(main memo...

  • Linux 内存管理

    Linux 内存管理 1 页的概念 linux 内核中把物理页作为内存分配的最小单位,32位CPU 页的大小通常为...

  • Java中四种引用

    Java内存管理包括内存分配和内存回收。 内存分配:程序员通过new对象,JVM会自动为该对象分配内存。 内存回收...

  • Java编程语言:java中四种引用!欢迎补充

    Java内存管理包括内存分配和内存回收。 内存分配:程序员通过new对象,JVM会自动为该对象分配内存。 内存回收...

  • 操作系统基本功能 -- 内存管理

    内存管理 总的来说,包括内存管理和虚拟内存管理。内存管理包括程序装入等概念、交换技术、连续分配管理方式和非连续分配...

  • Java 内存管理

    Java 内存管理 马士兵内存分配视频

  • OC总结篇 - 内存管理

    内存管理 内存在哪 为什么要进行内存管理 内存管理,是指运行时对计算机内存资源的分配和使用,目的是高效,快速的分配...

  • 内存分配与回收

    概述 java技术体系所提倡的自动内存管理其实主要包括 ①:给对象分配内存 ②:回收给对象分配的内存对象的内存分配...

网友评论

      本文标题:Linux 内存管理:内存分配

      本文链接:https://www.haomeiwen.com/subject/qcmjlctx.html