在 C 中,如果函数不返回,线程的执行堆栈会发生什么?
void funcB() __attribute__ ((noreturn));
int funcA (...)
{
// do stuff
funcB();
// do more stuff
}
这种情况的一个例子是,funcA 是创建新线程的内核函数,而 funcB 是将新线程切换到用户模式并让它运行的内核代码。
谢谢你。
在 C 中,如果函数不返回,线程的执行堆栈会发生什么?
void funcB() __attribute__ ((noreturn));
int funcA (...)
{
// do stuff
funcB();
// do more stuff
}
这种情况的一个例子是,funcA 是创建新线程的内核函数,而 funcB 是将新线程切换到用户模式并让它运行的内核代码。
谢谢你。
你见过这个吗?http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Function-Attributes.html
正如它在关于的部分中所说noreturn
:
不要假设调用函数保存的寄存器在调用 noreturn 函数之前已恢复。
我假设这意味着不能保证,例如,堆栈指针(或其他堆栈帧元素)将在noreturn
函数完成后恢复。