【发布时间】:2021-05-09 17:40:46
【问题描述】:
我正在编写一个在 Linux 上运行的 C 程序(使用不到 10 年的内核以防万一)。
在该程序中,我想确定某个时候我的进程堆的总体大小。
我知道我可以通过阅读 /proc/mypidhere/maps 并对其进行解析来以一种迂回的方式做到这一点 - 但我想更直接地做到这一点,并且不会弄乱文件和字符串。
注意事项:
- 我不需要 limit 值,我需要堆的当前大小。
- 我意识到
mmap()'ed 区域也可以是堆的一部分。我对解决这一事实的答案和忽略它的答案都感兴趣。
【问题讨论】:
-
我知道我可以通过读取 /proc/mypidhere/maps 并解析它以一种迂回的方式做到这一点并非如此 - Linux 上的
glibc使用mmap()和brk(),并没有真正的方法来区分mmap()'d 匿名页面的来源和地址空间映射。 -
通常不受限制,与虚拟地址空间一样大。你只能试试看 malloc 什么时候会失败。
-
@AndrewHenle:见编辑。
-
@0___________:我没有问限制,我问的是当前大小。
标签: c linux memory-management dynamic-memory-allocation heap-memory