問題タブ [setjmp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - この setjmp プログラムが 5 を出力するのはなぜですか?
次のコードは、「5」を出力するだけです
しかし、setjmp はどちらの関数でもなく 5 を返すため、これは意味がありません... 心配しないでください。私はこのコードをどこでも使用していません。
objective-c - Objective-C ARC と longjmp
Objective-C ARC と を混在させるためのベスト プラクティスは何longjmpですか?
スクリプト言語として Lua を使用しており、私のプラットフォームはスクリプト用のカスタム ライブラリをエクスポートしています。luaL_checkinteger(L, 2)エントリポイントは(とりわけ) で引数をチェックします。これは、 /luaL_typerror(L, 2, ...)で Lua に実装されている を呼び出すことができます。私の知る限り、ARC は単純に自動生成/コードを生成しますが、範囲外の場合はどうなりますか? このコードは、引数の入力ミスでリークしますか?setjmplongjmpretainreleaselongjmp
上記のスニペットでは、controlは ARC によって一時的に保持されますが、longjmpキャッチ不能な性質により、対応するリリース コールが発生しない可能性があります。一方、変数に代入する前に、すべての引数をチェックすることができます。control
上記の[潜在的な]リークは解決されますか? これを行うためのより良い方法はありますか?
更新: longjmpLua の内部にのみ巻き戻し、Lua ソース (認識されている) と私のエントリ ポイント (認識されていることを願っています) を除いて、システム コードを交差させることはありません。
2 番目のスニペットが正しいと確信していますが、正式な証明が必要です。
後期更新:
LuaJIT は dwarf2 互換のエラーを実装しているため、C++ の例外と同様です。Lua コードを使用してアーク対応ソースにコンパイラ フラグを渡す-fobjc-arc-exceptionsと、保持されているオブジェクトは任意の で解放されますlua_error。今、心配することは何もありません!ただし、Cocoa ランタイム全体でエラーをスローすることはまだ許可されていません。
元の Lua も例外付きでコンパイルされている可能性があることを思い出しますが、よくわかりません。
linux - gccでスタックフレームを復元するには?
独自のチェックポイント ライブラリを構築したい。スタック フレームを checkpoint_here(stack pointer) を呼び出してファイルに保存することができ、recover(stack pointer) 関数を呼び出して後で復元できます。
ここに私の問題があります:関数recover(sp)からmain()にジャンプできますが、スタックフレームが変更されます(スタックポインター、フレームポインター)。そこで、main() のスタック フレームを保持したまま checkpoint_here(sp) を呼び出した直後に、recover(sp) から main にジャンプしたい。setjmp/longjmp を試しましたが、機能しません。ご期待ください。
gdb - スタックの中央からのスタックの巻き戻し
私は gdb デバッガーを学習していますが、答えられない質問の 1 つは次のとおりです。新しい関数呼び出しにより、追加のスタック フレームが割り当てられ、呼び出しスタックが下方に成長します。スタック フレームの割り当てが解除され、未使用のメモリに戻されます。スタックの途中にあるフレームを削除してメモリに戻すことは可能ですか? ステートメントまたは longjmp 関数に移動して、これを実現できますか?
どうもありがとう。