如何在posix C中获取每个线程的堆栈大小和起始地址?或者,如果没有标准的posix方法,至少在Linux中使用gcc。
某些程序如Boehm-gc应该以某种方式做到这一点,但我现在很难读他们的代码。你能给我一些功能名称吗?
答案 0 :(得分:3)
执行此操作的“干净”但不可移植的方法是使用pthread_getattr_np
(Linux / glibc等)或类似函数来获取相关线程的属性对象,然后{{1获取堆栈基数/大小。然而,没有可移植的方法可以做到这一点,无论如何,基本上没有任何便携式的结果。
答案 1 :(得分:1)
对于单线程情况,只需在原始帧和当前帧中获取局部变量的地址。
位于当前函数堆栈和主堆栈之间的任何地址都必须在堆栈中。
请注意,不适用于直接定位的变量。您可能必须禁用几个函数的内联。