2012-10-08 48 views
0

我理解當分配大於MMAP_THRESHOLD字節的內存塊時,glibc malloc()實現將內存分配爲使用mmap的專用匿名映射,並且此mmap分配區域不會作爲在linux vma中的[堆]的一部分來進行。從Linux內核模塊中識別glibc mmap區域(VMA)

那麼是否有任何方法可以從linux內核模塊中識別所有glibc mmap區域?

例如:

一個測試程序,其做MALLOC大於MMAP_THRESHOLD多次顯示貓的/ proc/PID /地圖輸出作爲

00013000-00085000 rw-p 00000000 00:00 0   [heap] 
40000000-40016000 r-xp 00000000 00:0c 14107305 /lib/arm-linux-gnueabi/ld-2.13.so 
4025e000-4025f000 r--p 00001000 00:0c 14107276 /lib/arm-linux-gnueabi/libdl-2.13.so 
4025f000-40260000 rw-p 00002000 00:0c 14107276 /lib/arm-linux-gnueabi/libdl-2.13.so 
..... 
..... 
40260000-40261000 ---p 00000000 00:00 0 
40261000-40a60000 rw-p 00000000 00:00 0 
40a60000-40a61000 ---p 00000000 00:00 0 
40a61000-42247000 rw-p 00000000 00:00 0 
beed8000-beef9000 rw-p 00000000 00:00 0   [stack] 

在這種少數是的(40a61000-42247000,40261000- 40a60000)實際上是glibc的mmap區域,所以從Linux內核模塊有什麼方法可以識別這些區域,就像下面的代碼一樣,它們可以識別棧和堆?

if (vma->vm_start <= mm->start_brk && 
          vma->vm_end >= mm->brk) { 
     name = "[heap]"; 
} else if (vma->vm_start <= mm->start_stack && 
         vma->vm_end >= mm->start_stack) { 
     name = "[stack]"; 
} 
+0

你爲什麼問,你爲什麼專注於GNU Libc的細分市場,但不關心其他圖書館的細分市場?爲什麼你不能等價處理所有匿名的'mmap'? –

+0

@基本上我想從內核模塊轉儲我的應用程序的整個分配區域,爲什麼我想區分malloc mmap區域 – Dhyan

回答