gpt4 book ai didi

linux - 如何确定Linux中程序的堆栈大小?

转载 作者:IT王子 更新时间:2023-10-29 00:50:40 26 4
gpt4 key购买 nike

如何确定 linux 中程序的当前堆栈大小?

据说在 linux 中每个程序的堆栈大小为 8 MB 但是当你使用cat/proc//mmap 它显示不同的大小。

此外,如何确定关联线程的堆栈大小?既然说线程有自己的私有(private)栈?

最佳答案

如果您只是想要当前的堆栈大小,您可以在 main() 的顶部声明一个变量,获取它的地址,并将它与在您定义“当前”的任何地方声明的变量的地址进行比较。差异应该是堆栈增长的近似大小。

如果你想知道堆栈有多少内存,你可以查看/proc/[pid]/maps,其中有一个区域标记为[stack]。比如我的atd进程有:

7fff72a41000-7fff72a56000 rw-p 00000000 00:00 0                          [stack]
0175b000-0177c000 rw-p 00000000 00:00 0 [heap]

这给了你一个想法。

当我想知道我的程序使用的堆栈的最大 大小时,一位 friend 与我分享的一个绝妙技巧如下。我会在这里展示它,以防有人觉得它有用:)

1) 在靠近 main() 开头调用的函数中,使用 alloca() 或一个非常长的数组来在尽可能多的堆栈上涂上 0xDEADBEEF 或其他一些不太可能的常量。当小函数返回时,该内存将被“释放”。

2) 在 main 的末尾,再次使用 alloca() 获取内存区域并向下“搜索”它以查找您用来涂鸦的任何魔术常量(您可能会尝试找到其中的 64 个中的第一个 block 或跳过可能已分配但从未使用过的内存区域的内容),并且该指针所在的位置指示您的最大堆栈使用量。

不完美,但对我的工作很有用!

关于linux - 如何确定Linux中程序的堆栈大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1678803/

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