slab层分配是虚拟地址嘛
时间: 2024-03-04 18:50:32 浏览: 17
在Linux内核中,slab分配器是一种用于管理内核对象的内存分配器。slab分配器会将内存划分成许多小块,称为slab。每个slab包含一定数量的内核对象,这些内核对象的大小相同。当内核需要分配内存来创建一个新对象时,它会从一个已经存在的slab中分配一个空闲对象。因此,slab分配器所分配的内存是虚拟地址,而不是物理地址。当内核需要将这些内存映射到物理地址时,会使用页表来进行映射。
相关问题
页分配器和slab分配器
页分配器和slab分配器是两种不同的内存分配算法。
页分配器是一种基于页面的内存分配算法,它将物理内存划分为固定大小的页面,并提供函数来分配和释放这些页面。在Linux内核中,页分配器主要由buddy分配器和slub分配器组成。
而slab分配器是一种基于缓存的内存分配算法,它使用缓存来存储和管理小块内存。在Linux内核中,slab分配器是通过管理一组slab对象来实现的。每个slab对象都包含一组相同大小的内存块,这些内存块可以被分配和释放。当需要分配内存时,slab分配器会从缓存中分配一个slab对象,并使用其中的内存块来分配所需的内存。
总的来说,页分配器更适合大块内存的分配和释放,而slab分配器更适合小块内存的分配和释放。在Linux内核中,它们通常一起使用,以提供高效的内存管理。
内存分配伙伴系统和slab是什么?
内存分配伙伴系统和slab都是Linux操作系统中的内存管理机制。
内存分配伙伴系统是一种动态分配内存的方法,通过将内存块划分为不同大小的块,然后按照2的幂次方的规则组合成伙伴块,从而使得内存分配和释放更加高效。伙伴系统主要用于大块内存的分配,如页帧等。
而slab是一种用于管理小块内存的机制,通过将内存划分为若干个大小相等的slab,每个slab中包含若干个大小相等的内存块,用于分配较小的内存空间,如文件描述符、进程控制块等。slab机制可以提高内存分配和释放的效率,减少内存碎片的产生。
两者都是Linux内核中常用的内存管理机制,各自适用于不同大小的内存分配,可以提高系统的内存利用率和性能。