7

setjmpさまざまな実装のソースを閲覧してlongjmpいて、すべての CPU レジスタが構造体に保存されているわけではないことに気付きましたjmp_buf。AMD64 ABI を確認した後、callee-saved レジスターのみが保存されていることに気付きました。

一部のレジスタのみが保存されている場合に、関数の状態を完全に再開する方法がわかりません。確かに、保存されていないレジスタは、後で呼び出すまで何度も何度も上書きされたに違いありませんlongjmpか?

しかし、すべてが完璧に機能するので、私には理解できないことがあります。誰かがこれに光を当てることができることを望んでいました。

ありがとう!

4

1 に答える 1

6

このsetjmp関数は他の関数と同様の関数であるため、呼び出し元が保存したレジスターをすべて破壊すると見なすことができます。そのため、これらのレジスタを保存/復元する必要はありません。

于 2012-07-01T20:38:35.373 に答える