在C90中实现无溢出系统堆栈
我只是在阅读有关Google Go默认情况下如何使每个线程的堆栈大小减小的信息,然后在发生溢出时链接到新堆栈(请参阅此处的第16页)。我想知道用C做到这一点的最佳方法。
我必须说我不是C专家,所以可能会有更好的方法来检测C上的堆栈溢出,但是由于我的无知,这是我认为自己将如何实现它:
我想到的第一件事是,每当我们有一个新的新堆栈时,我们都会获得一个堆栈变量的地址,并由此获得一个大致的起始堆栈地址。然后,我们将需要能够检索线程有多少堆栈空间。如果线程不是主线程,这将是可能的,但是我不知道我们如何获得有关C的信息。
然后,我们需要通过检索当前的堆栈变量地址来检查(可能是每个函数调用)已经使用了多少堆栈。如果我们检测到可能的堆栈溢出,则需要某种方式来创建新堆栈并链接到最后一个堆栈。我认为可以用C语言完成的唯一方法是创建一个新线程来执行所需的函数,并锁定当前线程,直到函数返回结果。
那么,会有没有更清洁/更好的方法来实现这一目标?
没有找到相关结果
已邀请:
2 个回复
垫歌蝎降凤
磨标烫徽啪