[英]Get the size of heap and stack per process in Linux
我想知道linux中每个进程的堆和堆栈的大小。 有没有办法找到它?
我发现sbrk(0)会给我堆的结束。 但是如何才能找到堆的开头来获取堆大小?
另外在堆栈大小上有没有办法通过任何库调用或系统调用找到每个进程的堆栈开始和当前堆栈指针地址?
在Linux上,您可以读取/proc/[PID]/maps
并查找[heap]
和[stack]
条目。
但对于通常在Linux上使用的GLIBC堆实现,“堆”包括通过sbrk()
获得的内存,它在/proc/[PID]/maps
文件中显示为[heap]
和通过mmap()
获得的内存 -看到这个问题 。 所以堆的“大小”很难确定。
并且maps
文件中标记为[stack]
的区域仅是主线程的堆栈。 多线程进程将有多个堆栈,每个线程一个堆栈。 它们将作为匿名内存显示在maps
文件中 - 也许。 应用程序可以通过使用pthread_attr_setstack()
来控制用于线程堆栈的内存,并将其设置为应用程序可能使用的任何内存。
你可以进入下面的文件。 你应该是root用户。
/proc/<pid>/maps
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.