我正在寻找一种在不同堆栈中调用 C 函数的方法,即保存当前堆栈指针,将堆栈指针设置到不同位置,调用该函数并在返回时恢复旧堆栈指针。
这样做的目的是为编程语言提供一个轻量级的线程系统。线程将在非常小的堆栈上运行,检查何时需要更多堆栈并动态调整其大小。这样可以在不浪费大量内存的情况下分配数千个线程。在调用 C 代码时,使用小堆栈是不安全的,因为 C 代码不知道检查和调整大小,所以我想使用一个大的 pthread 堆栈,它仅用于调用 C(在轻量级线程之间共享相同的 pthread)。
现在我可以编写可以正常工作的汇编代码存根,但我想知道是否有更好的方法来做到这一点,例如 gcc 扩展或已经实现它的库。如果没有,那么我想我会把头埋在 ABI 和汇编语言手册中;-) 我只是出于懒惰而不想重新发明轮子而问这个问题。