我刚刚读到Google Go默认情况下如何使每个线程的堆栈大小减少,然后如果发生溢出则链接到新堆栈(参见
here中的第16页).我想知道用C做最好的方法.
我不得不说我不是C专家,所以可能有更好的方法来检测C上的Stack Overflow,但是让我无知,这就是我认为我会实现它的方式:
我想的第一件事是每次我们有一个新的堆栈时,我们得到一个堆栈变量的地址,并且我们大致有起始堆栈地址.然后我们需要能够检索线程有多少堆栈空间.如果线程不是主线程,这是可能的,但我不知道如何在C上获取此信息.
然后我们需要通过检索当前堆栈变量地址来检查(每个函数调用,它可能是)已经使用了多少堆栈.如果我们检测到可能的堆栈溢出,我们需要有一些方法来创建一个新的堆栈并链接到最后一个堆栈.我认为可以在C中完成的唯一方法是创建一个新线程来执行我们想要的函数,并锁定当前线程直到函数返回其结果.
那么,是否有更清洁/更好的方法来实现这一点?
谢谢!