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

How to get the size and the starting address of the stack per thread in posix C?

如何在 posix C 中获取每个线程的堆栈大小和起始地址?或者,如果没有标准的 posix 方法来做到这一点,至少在 Linux 和 gcc 中是这样。

有些程序(例如 Boehm-gc)应该以某种方式执行此操作,但我现在在阅读它们的代码时感到很困惑。你能给我一些函数名吗?

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

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

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

"clean"但不可移植的方法是使用pthread_getattr_np(Linux/glibc等)或类似函数来获取线程的属性对象问题,则pthread_attr_getstack获取堆栈base/size。但是,没有可移植的方法来执行此操作,而且基本上您无法对结果进行任何可移植的操作。