获取Linux中每个进程的堆和堆栈的大小

shi*_*ang 4 c linux heap-memory stack-memory

我想知道Linux中每个进程的堆和堆栈的大小。有什么办法可以找到吗?

我发现 sbrk(0) 会给我堆的结尾。但是如何找到堆的起始位置来获取堆大小呢?

另外,关于堆栈大小,是否有任何方法可以通过任何库调用或系统调用找到每个进程的堆栈开头和当前堆栈指针地址?

And*_*nle 7

在 Linux 上,您可以阅读/proc/[PID]/maps和查找[heap][stack]条目。

但对于 Linux 上通常使用的 GLIBC 堆实现,“堆”由通过文件sbrk()中显示的获得的内存通过 获得的内存组成- 请参阅此问题。因此,堆的“大小”将很难确定。/proc/[PID]/maps[heap] mmap()

[stack]文件中标记的区域maps只是主线程的堆栈。多线程进程将有多个堆栈,每个线程一个。它们可能会作为匿名内存出现在文件中maps。应用程序可以通过使用来控制用于线程堆栈的内存pthread_attr_setstack(),并将其设置为应用程序可能使用的任何内存。