如何在posix C中获取每个线程的堆栈大小和起始地址?

时间:2015-07-30 23:39:36

标签: c stack

如何在posix C中获取每个线程的堆栈大小和起始地址?或者,如果没有标准的posix方法,至少在Linux中使用gcc。

某些程序如Boehm-gc应该以某种方式做到这一点,但我现在很难读他们的代码。你能给我一些功能名称吗?

2 个答案:

答案 0 :(得分:3)

执行此操作的“干净”但不可移植的方法是使用pthread_getattr_np(Linux / glibc等)或类似函数来获取相关线程的属性对象,然后{{1获取堆栈基数/大小。然而,没有可移植的方法可以做到这一点,无论如何,基本上没有任何便携式的结果。

答案 1 :(得分:1)

对于单线程情况,只需在原始帧和当前帧中获取局部变量的地址。

位于当前函数堆栈和主堆栈之间的任何地址都必须在堆栈中。

请注意,适用于直接定位的变量。您可能必须禁用几个函数的内联。