gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:49 24 4
gpt4 key购买 nike

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

我发现 sbrk(0) 会给我堆末尾。但是我怎样才能找到堆的开始以获得堆大小呢?

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

最佳答案

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

但对于通常在 Linux 上使用的 GLIBC 堆实现,“堆”包括通过 sbrk() 获得的内存,它们显示在 /proc/[PID]/maps 中 文件作为[heap] 通过mmap() 获取的内存 - 参见this quesiton .因此,堆的“大小”将很难确定。

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

关于c - 在 Linux 中获取每个进程的堆和堆栈的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40127980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com