vmalloc与kmalloc的区别
时间: 2023-11-27 08:40:20 浏览: 90
vmalloc和kmalloc是在Linux内核中进行内存分配的函数。它们之间的区别如下:
1. 分配的内存类型不同:kmalloc分配的是内核的内存,而vmalloc分配的是虚拟地址空间中的内存。
2. 内存连续性不同:kmalloc分配的内存在物理上是连续的,而vmalloc分配的内存在虚拟地址空间上是连续的,但物理内存不一定连续。
3. 可分配大小的限制不同:kmalloc能分配的大小有限,而vmalloc和malloc相对较大。
4. 物理连续性的需求不同:只有在需要进行DMA访问时,才需要物理上连续的内存。
5. 分配速度不同:vmalloc比kmalloc要慢。
相关问题
vmalloc和kmalloc区别
vmalloc和kmalloc是Linux内核中用来分配内存的两种函数。
vmalloc是虚拟内存分配函数,它用于分配较大的连续内存块。vmalloc通过映射物理内存到虚拟内存空间来实现内存分配,它可以分配任意大小的连续内存块,并且可以跨越物理内存页的边界。vmalloc常用于需要大量连续内存的场合,例如需要分配大型数组或缓冲区的情况。
kmalloc是内核内存分配函数,它用于分配较小的内存块。kmalloc通过管理内存池来实现内存分配,它可以分配任意大小的内存块,但是分配的内存块不一定是连续的。kmalloc常用于分配较小的内存块,例如用于分配结构体或链表节点等。
总的来说,vmalloc适用于分配较大的连续内存块,kmalloc适用于分配较小的内存块。在使用时,需要根据实际需求来选择适当的内存分配函数。
vmalloc及kmalloc区别
vmalloc和kmalloc都是Linux内核中用来分配内存的函数,但它们有一些区别。
1. 分配内存的方式不同。
vmalloc分配的是一段虚拟地址空间,该虚拟地址空间可以映射到物理内存或者交换空间。vmalloc适用于分配大块内存,它可以跨越多个物理页面进行分配。
kmalloc分配的是一块物理内存,这块内存的大小也是固定的。kmalloc适用于分配小块内存,它只能在单个物理页面进行分配。
2. 分配内存的大小不同。
vmalloc适用于分配大块内存,可以分配比较大的内存块。
kmalloc适用于分配小块内存,它只能分配比较小的内存块。如果需要分配比较大的内存块,那么就需要多次调用kmalloc函数。
3. 分配内存的位置不同。
vmalloc分配的内存可以位于高端内存区域(high memory),也可以位于低端内存区域(low memory)。高端内存区域是指物理内存地址大于896MB的区域,这些内存需要通过内核映射才能够被访问。低端内存区域是指物理内存地址小于896MB的区域,这些内存可以直接被访问。
kmalloc分配的内存只能位于低端内存区域,因为它只能在单个物理页面进行分配。如果需要在高端内存区域分配内存,就需要使用vmalloc函数。
综上所述,vmalloc适用于分配大块内存,可以在高端内存区域和低端内存区域进行分配;kmalloc适用于分配小块内存,只能在低端内存区域进行分配。
阅读全文