1

Cでは、関数が返されない場合、スレッドの実行スタックはどうなりますか?

void funcB() __attribute__ ((noreturn));

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

この状況の例は、たとえば、funcAは新しいスレッドを作成するカーネル関数であり、funcBは新しいスレッドをユーザーモードに切り替えて実行させるカーネルコードです。

ありがとうございました。

4

1 に答える 1

0

これを見たことがありますか?http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Function-Attributes.html

についてのセクションで述べているようにnoreturn

noreturn 関数を呼び出す前に、呼び出し関数によって保存されたレジスタが復元されると想定しないでください。

これは、たとえば、noreturn関数の終了後にスタック ポインター (または他のスタック フレーム要素) が復元されるという保証がないことを意味すると思います。

于 2012-10-04T00:23:56.137 に答える