我最近发布了一个关于堆栈分段和提升协程的问题, 但似乎 -fsplit-stack 方法仅适用于使用该标志编译的源文件,当您分支到另一个尚未编译的函数时,运行时会中断 - fsplit 堆栈。例如_
这意味着运行时使用函数本地技术来检测当前堆栈何时被超越。而不是“保护页面信号”技巧,堆栈的末尾总是有一个保护页面,它将在写入或读取时发出信号,告诉运行时分配一个新的堆栈帧并分支到那个。
那么这个flag有什么用呢?如果我链接到任何其他尚未使用此构建的库,代码将中断(甚至是 libstdc++ 和 libc),那么人们如何在大型项目中实际使用它?
通过阅读有关拆分堆栈的gcc wiki,似乎从拆分堆栈函数调用非拆分堆栈函数会导致分配 64KB 堆栈帧。好的。
但似乎尚未实现从函数指针调用非拆分堆栈函数以遵循上述方案。
那这个flag有什么用呢?如果我继续调用任何虚函数,我的程序会中断吗?
从下面的答案来看,clang 似乎还没有实现拆分堆栈?