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]";
}
你爲什麼問,你爲什麼專注於GNU Libc的細分市場,但不關心其他圖書館的細分市場?爲什麼你不能等價處理所有匿名的'mmap'? –
@基本上我想從內核模塊轉儲我的應用程序的整個分配區域,爲什麼我想區分malloc mmap區域 – Dhyan