如果函数没有返回,执行堆栈会发生什么?

时间:2012-10-04 00:13:26

标签: c operating-system

在C中,如果函数没有返回,线程的执行堆会发生什么?

void funcB() __attribute__ ((noreturn));

int funcA (...)
{
   // do stuff
   funcB();
   // do more stuff
}

这种情况的一个例子是,funcA是创建新线程的内核函数,funcB是将新线程切换到用户模式并让它运行的内核代码。

谢谢。

1 个答案:

答案 0 :(得分:0)

你看到了这个吗? http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Function-Attributes.html

正如关于noreturn

的部分所述
  

在调用noreturn函数之前,不要假设调用函数保存的寄存器已恢复。

我认为这意味着无法保证在noreturn函数完成后,例如堆栈指针(或其他堆栈框架元素)将被恢复。