malloc,vmalloc,kmalloc区别

1、kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存

2、kmalloc保证分配的内存在物理上是连续的,内存只有在要被DMA访问的时候才需要物理上连续,malloc和vmalloc保证的是在虚拟地址空间上的连续

3、kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大

4、vmalloc比kmalloc要慢。尽管在某些情况下才需要物理上连续的内存块,但是很多内核代码都用kmalloc来获得内存,而不是vmalloc。这主要是出于性能的考虑。vmalloc函数为了把物理内存上不连续的页转换为虚拟地址空间上连续的页,必须专门建立页表项。糟糕的是,通过vmalloc获得的页必须一个个地进行映射,因为它们物理上是不连续的,这就会导致比直接内存映射大得多的TLB抖动,vmalloc仅在不得已时才会用--典型的就是为了获得大块内存时。

你可能感兴趣的:(C++)