Linux系统内存知识点有哪些

发布时间:2021-11-20 17:09:04 作者:小新
来源:亿速云 阅读:234

这篇文章主要介绍Linux系统内存知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、走进 linux 内存

1、内存是什么?

1)内存又称主存,是 CPU 能直接寻址的存储空间,由半导体器件制成

2)内存的特点是存取速率快

Linux系统内存知识点有哪些

2、内存的作用

1)暂时存放 cpu 的运算数据

2)硬盘等外部存储器交换的数据

3)保障 cpu 计算的稳定性和高性能

Linux系统内存知识点有哪些

二、 linux 内存地址空间

1、linux 内存地址空间 Linux 内存管理全貌

Linux系统内存知识点有哪些

2、内存地址——用户态&内核态

Linux系统内存知识点有哪些

3、内存地址——MMU 地址转换

Linux系统内存知识点有哪些

4、内存地址——分段机制

1) 段选择符

2) 分段实现

Linux系统内存知识点有哪些

5、内存地址——分页机制(32 位)

Linux系统内存知识点有哪些

6、用户态地址空间

Linux系统内存知识点有哪些

7、内核态地址空间

Linux系统内存知识点有哪些

8、进程内存空间

Linux系统内存知识点有哪些

三、 Linux 内存分配算法

内存管理算法——对讨厌自己管理内存的人来说是天赐的礼物

1、内存碎片

1)    基本原理

2) 如何避免内存碎片

2、伙伴系统算法——组织结构

1)    概念

2)    外部碎片

Linux系统内存知识点有哪些

3、伙伴系统算法——申请和回收

1)    申请算法

  如果仍然没有,则返回内存分配失败

2)    回收算法

Linux系统内存知识点有哪些

Linux系统内存知识点有哪些

3)    条件

4、如何分配 4M 以上内存?

1)    为何限制大块内存分配

2)    内核中获取 4M 以上大内存的方法

5、伙伴系统——反碎片机制

1)    不可移动页

2)    可回收页

6、slab 算法——基本原理

1)    基本概念

2)    内部碎片

7、slab 分配器的结构

Linux系统内存知识点有哪些

8、slab 高速缓存

1)    普通高速缓存

2)    专用高速缓存

9、内核态内存池

1)    基本原理

2)    内核 API

Linux系统内存知识点有哪些

10、用户态内存池

1)    C++ 实例

Linux系统内存知识点有哪些

11、DMA 内存

1)    什么是 DMA

2)    DMA 信号

Linux系统内存知识点有哪些

四、 内存使用场景

out of memory 的时代过去了吗?no,内存再充足也不可任性使用。

1、内存的使用场景

2、用户态内存分配函数

a)     如果当前连续内存块足够 realloc 的话,只是将 p 所指向的空间扩大,并返回 p 的指针地址。这个时候 q 和 p 指向的地址是一样的

b)     如果当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p 指向的内容 copy 到 q,返回 q。并将 p 所指向的内存空间删除

3、内核态内存分配函数

函数分配原理最大内存其他_get_free_pages直接对页框进行操作4MB适用于分配较大量的连续物理内存kmem_cache_alloc基于 slab 机制实现128KB适合需要频繁申请释放相同大小内存块时使用kmalloc基于 kmem_cache_alloc 实现128KB最常见的分配方式,需要小于页框大小的内存时可以使用vmalloc建立非连续物理内存到虚拟地址的映射物理不连续,适合需要大内存,但是对地址连续性没有要求的场合dma_alloc_coherent基于_alloc_pages 实现4MB适用于 DMA 操作ioremap实现已知物理地址到虚拟地址的映射适用于物理地址已知的场合,如设备驱动alloc_bootmem在启动 kernel 时,预留一段内存,内核看不见小于物理内存大小,内存管理要求较高

4、malloc 申请内存

Linux系统内存知识点有哪些

Linux系统内存知识点有哪些

5、缺页异常

Linux系统内存知识点有哪些

6、用户进程访问内存分析

Linux系统内存知识点有哪些

7、共享内存

1)    原理

Linux系统内存知识点有哪些

2)    shm 接口

五、 内存使用那些坑

1、C 内存泄露

Linux系统内存知识点有哪些

2、C 野指针

3、C 资源访问冲突

4、STL 迭代器失效

错误示例:删除当前迭代器,迭代器会失效

Linux系统内存知识点有哪些

正确示例:迭代器 erase 时,需保存下一个迭代器

Linux系统内存知识点有哪些

5、C++ 11 智能指针

Linux系统内存知识点有哪些

Linux系统内存知识点有哪些

Linux系统内存知识点有哪些

(2)数据结构:

Linux系统内存知识点有哪些

  (3)使用方法:a. lock() 获取所管理的对象的强引用指针 b. expired() 检测所管理的对象是否已经释放 c. get() 访问智能指针对象

6、C++ 11 更小更快更安全

forward_list 是单链表(std::list 是双链表),只需要顺序遍历的场合,forward_list 能更加节省内存,插入和删除的性能高于 list

Linux系统内存知识点有哪些

Linux系统内存知识点有哪些

Linux系统内存知识点有哪些

Linux系统内存知识点有哪些

Linux系统内存知识点有哪些

以上是“Linux系统内存知识点有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. Oracle内存和架构知识点有哪些
  2. java中堆内存与栈内存的知识点有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux

上一篇:如何解析JDK源码Java.lang.Boolean的浅析

下一篇:怎么搭建Mysql单机实例

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》