在使用slab分配器进行内存分配时,可能会出现以下缺点:

  1. 内存碎片化。由于slab分配器需要将内存分成大小相同的块,如果分配不均衡或者对象大小不同,就容易导致内存碎片化。
  2. 性能下降。Slab分配器将内存分成不同的缓存区,每个缓存区都有自己的对象池。因此,当需要分配内存时,需要先找到合适的缓存区,再从对象池中分配。这个过程会耗费时间,并且在高负载情况下可能会成为系统瓶颈。
  3. 不支持动态调整大小。一旦一个对象池被创建,它的大小就不能再被修改。如果需要修改对象池的大小,就需要重新创建对象池,重新初始化所有的对象以及重新分配所有内存。这个过程也很耗时。
  4. 可能会出现溢出。Slab分配器在管理内存时并没有足够的容错机制,如果分配器发生错误或者缓存区满了,就会导致内存溢出。

slab分配器正式在后续linux 6.5合入主线

相较于slab分配器,slub分配器具有以下优点:

  1. 减少内存碎片化。Slub分配器避免了将内存分成大小相同的块,而是根据需要动态分配内存,减少了内存碎片化的问题。
  2. 更高效的内存管理。Slub分配器取消了缓存区的概念,使用了更加灵活的对象池管理方式。这样可以更快地进行内存分配,提高了系统的效率。
  3. 支持动态调整大小。Slub分配器支持动态调整对象池的大小,可以更加灵活地管理内存。
  4. 更好的容错机制。Slub分配器对溢出等错误有更好的容错机制,可提高系统的稳定性。

slab分配器正式被弃用,slub成为分配器唯一选择的更多相关文章

  1. (转)Linux SLUB 分配器详解

    原文网址:https://www.ibm.com/developerworks/cn/linux/l-cn-slub/ 多年以来,Linux 内核使用一种称为 SLAB 的内核对象缓冲区分配器.但是, ...

  2. Linux内存管理 (5)slab分配器

    专题:Linux内存管理专题 关键词:slab/slub/slob.slab描述符.kmalloc.本地/共享对象缓冲池.slabs_partial/slabs_full/slabs_free.ava ...

  3. linux内存源码分析 - SLAB分配器概述【转】

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请 ...

  4. linux内存源码分析 - SLAB分配器概述

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请 ...

  5. 【原创】(十一)Linux内存管理slub分配器

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  6. 内存管理 初始化(五)kmem_cache_init 初始化slab分配器(上)

    看了下kmem_cache_init,涉及到不同MIGRATE间的buddy system的迁移,kmem_cache的构建,slab分配器头的构建.buddy system的伙伴拆分. 对于SMP系 ...

  7. 从内核源码看 slab 内存池的创建初始化流程

    在上篇文章 <细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现 >中,笔者从 slab cache 的总体架构演进角度以及 slab cache 的运行原理角度为大家勾勒 ...

  8. 图解slub

    1.前言 在Linux中,伙伴系统(buddy system)是以页为单位管理和分配内存.但是现实的需求却以字节为单位,假如我们需要申请20Bytes,总不能分配一页吧!那岂不是严重浪费内存.那么该如 ...

  9. linux内存管理源码分析 - 页框分配器

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 最近在学习内核模块的框架,这里做个总结,知识太多了. 分段和分页 先看一幅图 也就是我们实际中编码时遇到的内存地 ...

  10. 内存管理(1)-buddy和slub算法

    Linux内存管理是一个很复杂的系统,也是linux的精髓之一,网络上讲解这方面的文档也很多,我把这段时间学习内存管理方面的知识记录在这里,涉及的代码太多,也没有太多仔细的去看代码,深入解算法,这篇文 ...

随机推荐

  1. python网络通信:IP/端口基础知识

    1.学习网络编程的目的 将多个设备通过网络连接在一起,进行数据共享 2.IP地址 作用:在逻辑上标记一台电脑 特点:没有重复的 3.通过收发数据理解IP地址的作用 dest ip 表示目的ip/src ...

  2. ComfyUI插件:ComfyUI Impact 节点(四)

    前言: 学习ComfyUI是一场持久战,而 ComfyUI Impact 是一个庞大的模块节点库,内置许多非常实用且强大的功能节点 ,例如检测器.细节强化器.预览桥.通配符.Hook.图片发送器.图片 ...

  3. ddddocr验证码图片识别YYDS

    纯数字 数字+字母 python代码: import ddddocr def main(imgpath): # imgpath='E:\yam_0.png' ocr = ddddocr.DdddOcr ...

  4. 【YAML】非标记语言的标记语言

    什么是YAML? YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写. 在开发的这种语言时,YAML 的意思其实是:&qu ...

  5. 【SpringBoot】Re 02 Import与自定义装配实现

    Import的注册形式: 1.使用@Import导入一个或者多个类字节对象 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME ...

  6. 【转载】 Pytorch手动释放显存

    原文地址: http://www.shijinglei.com/2020/04/20/pytorch%E9%87%8A%E6%94%BE%E6%98%BE%E5%AD%98/ ============ ...

  7. python语言绘图:绘制一组beta分布图

    代码源自: https://github.com/PacktPublishing/Bayesian-Analysis-with-Python ============================= ...

  8. jQuery Eazyui的学习和使用(一)

    工作需要,需要学习使用据说非常简单好用的前端框架-----Eazyui 先看看简介吧:"jQuery EasyUI 是一个基于 jQuery 的框架,集成了各种用户界面插件.jQuery E ...

  9. 8. 从0学ARM-内联汇编、混合汇编、ATPCS规则

    一.gcc 内联汇编 内联汇编即在C中直接使用汇编语句进行编程,使程序可以在C程序中实现C语言不能完成的一些工作,例如,在下面几种情况中必须使用内联汇编或嵌入型汇编. 程序中使用饱和算术运算(Satu ...

  10. Python 开发中,使用bcrypt 或 Passlib 对系统用户密码进行哈希和验证处理

    在设计一个系统的时候,肯定都有会有用户身份认证的问题,一般对用户校验的时候,都是对用户存在数据库总的密码哈希值进行判断,从而避免密码泄露和反向解密,那么在Python 开发中,我们可以引入bcrypt ...