【发布时间】:2012-09-11 13:27:48
【问题描述】:
我注意到在 2.6.32 MIPS 内核上,内存布局总是相同的。对于大多数进程(或至少我研究过的进程)来说,这是一个程序的堆从0x10146000 开始。还有另一个相似之处是/lib32/ld-2.9.so 总是从2aaa8000 开始。
所以基本上堆在虚拟内存中保留了所有这些大小,我想修改它,因为似乎在某些时候我用完了虚拟内存(在地址空间的其余部分)mmap 会尽管堆只有几 MB,但没有尝试在上述空间中映射就失败了。有人现在内核在哪里设置这个地址吗?
【问题讨论】:
-
在您的进程上运行
pmap -x <pid>以查看是否有任何空闲的虚拟地址空间区域及其大小。 -
好吧,
pmap和/proc/pid/maps提供的内容并没有太大区别。整个想法是修改参数,以便堆没有那么大的空间保留(几乎 400mb) -
堆通常使用
brk和sbrk调用分配。你能strace你的进程看看它是否调用了这些吗? -
brk()和sbrk()通常会分配 /proc/pid/maps 中未报告的内存。所以基本上它扩展了我想要缩小的那个空间中的 [heap] 部分 -
这正是我所说的。但这不是我要找的。我不想使用
brk()/sbrk()我想限制操作系统内核为将来的brk()调用保留的第一个间隙。
标签: linux linux-kernel kernel