我刚刚了解到Google Go默认使每个线程的堆栈大小减小,如果溢出会链接到新的堆栈(请参见这里的第16页)。我在想如何用C实现最佳方法。
我必须说我不是C专家,所以可能有更好的方法来检测C中的堆栈溢出,但考虑到我的无知,以下是我认为我会实现的方式:
我首先想到的是,每次我们有一个全新的堆栈,我们会得到一个堆栈变量的地址,然后大致得到起始堆栈地址。然后,我们需要能够检索线程具有多少堆栈空间。如果线程不是主线程,则可能可以实现此操作,但我不知道如何在C中获取此信息。
然后,我们需要检查(每个函数调用可能都需要)已使用了多少堆栈,通过检索当前堆栈变量地址。如果检测到可能的堆栈溢出,我们需要有一种方法创建一个新的堆栈并链接到上一个堆栈。我认为在C语言中唯一可行的方法是创建一个新线程来执行我们想要的函数,并锁定当前线程直到该函数返回其结果。
那么,是否有更清晰/更好的方法来实现这一点?
我必须说我不是C专家,所以可能有更好的方法来检测C中的堆栈溢出,但考虑到我的无知,以下是我认为我会实现的方式:
我首先想到的是,每次我们有一个全新的堆栈,我们会得到一个堆栈变量的地址,然后大致得到起始堆栈地址。然后,我们需要能够检索线程具有多少堆栈空间。如果线程不是主线程,则可能可以实现此操作,但我不知道如何在C中获取此信息。
然后,我们需要检查(每个函数调用可能都需要)已使用了多少堆栈,通过检索当前堆栈变量地址。如果检测到可能的堆栈溢出,我们需要有一种方法创建一个新的堆栈并链接到上一个堆栈。我认为在C语言中唯一可行的方法是创建一个新线程来执行我们想要的函数,并锁定当前线程直到该函数返回其结果。
那么,是否有更清晰/更好的方法来实现这一点?
malloc
,都有可能失败,而应用程序也无法检测和处理这种情况。 - R.. GitHub STOP HELPING ICE