本文主要介紹kmalloc和malloc區(qū)別(vmallocchunk),下面一起看看kmalloc和malloc區(qū)別(vmallocchunk)相關(guān)資訊。
kmalloc函數(shù)返回一個(gè)虛擬地址(線性地址)。kmalloc的特殊之處在于,它分配的內(nèi)存是物理連續(xù)的,這對(duì)于dma設(shè)備非常重要。但是vmalloc分配的內(nèi)存只是線性連續(xù)的,物理地址不一定是連續(xù)的,所以不能直接用于dma。
vmalloc函數(shù)的工作方式與kmalloc類(lèi)似,只是前者分配的虛擬地址是連續(xù)的,而物理地址不需要連續(xù)。通過(guò)vmalloc獲取的頁(yè)面必須一一映射,效率很低。因此,
僅在必要時(shí)使用(通常是為了獲得大量?jī)?nèi)存)。函數(shù)的作用是:返回一個(gè)指針,指向一個(gè)邏輯上連續(xù)的內(nèi)存區(qū)域,其大小至少為。發(fā)生錯(cuò)誤時(shí),函數(shù)返回null。vmalloc可能會(huì)休眠,因此,
它不能從中斷上下文或其他不允許阻塞的情況下調(diào)用。要釋放通過(guò)vmalloc獲得的內(nèi)存,請(qǐng)使用vfree函數(shù)。
vmalloc和kmalloc的分配內(nèi)存的特征如下:
區(qū)別大致可以是總結(jié)是:
1.vmalloc一般分配高端內(nèi)存,內(nèi)存不夠的時(shí)候才分配低端內(nèi)存;kmallco從低端內(nèi)存分配。
2.vmalloc分配的物理地址一般是不連續(xù)的,而kmalloc分配的是連續(xù)的,兩者分配的虛擬地址都是連續(xù)的;
3.vmalloc一般分配大塊內(nèi)存,kmaooc一般分配小塊內(nèi)存(一般小于128k);