我正在编写一个内核模块,它将接受用户进程id(PID
)作为输入并转储该用户进程的所有地址空间,如堆栈,堆段。
我把mm->start_brk
作为堆的开头,mm->brk
作为堆的结尾,然后我看到,即使用户进程没有使用33页,堆大小显示为33页
(mm->brk
- mm->start_brk
)。 (我使用/proc/pid/maps
验证了这一点)。堆栈的行为也类似。
那么有什么方法可以找出真正使用的堆从mm->start_brk
开始,所以我只能转储使用过的堆。
答案 0 :(得分:2)
进程可以使用brk
和mmap
分配内存。后者不会更改堆,而是单独分配。
mm->mmap
是由mmap
创建的映射的链接列表。