私は陽性ではないが陽性ではないと仮定しています。他の変数がスタック内の同じ場所を占めることができるかどうかは不明です。関数のローカル変数は、実行するたびに常に同じメモリ位置に格納されますか?
答えて
いいえ。関数のローカル変数が必ずしも同じアドレスにあるとは限りません。
再帰関数を考えてみましょう。ローカル変数が同じ場所にあると想定されていた場合、再帰に出入りするたびに、すべての値をコピーする必要があります。
通常の方法は、各関数呼び出しにスタック上に「ブロック」があることです。行内で同じ関数を2回呼び出すと、ローカル変数のアドレスはおそらく同じになります。再帰的に呼び出すと、2番目の呼び出しはスタックの別の領域にあるため、ローカル変数のアドレスは異なります。
[さらに、プログラムをメモリにロードするソフトウェアは、悪意のある俳優による悪用を防ぐために、プロセスのさまざまな部分をロードするアドレスを故意にランダム化することがあります。](https://en.wikipedia.org/wiki/Address_space_layout_randomization) –
また、関数が複数のスレッド、つまり複数のスレッドから呼び出されたときにどうなるかを検討してください。複数のスタックから取得します。 –
コンパイラは、「スタックポインタ」アドレス+オフセットに基づいてメモリアドレスを割り当てるコードを生成します。したがって、各ローカルの実際の物理アドレスは、関数の呼び出しごとに異なります。コンパイラコードのgenロジックが同じになるため、オフセットは毎回同じになる可能性があります。スタックポインターアドレスは、関数の次の呼び出しの前に実行される他のものに基づいて異なる可能性があります。
- 1. Stringに格納された関数を実行します。 Java
- 2. Lua - テーブルに格納された関数を実行する
- 3. 実行時に同じ変数に別のデータ型を格納します
- 4. 変数に格納されたコマンドを実行する
- 5. 変数をローカルに格納する
- 6. インタフェース{}に格納されている関数を実行する
- 7. 関数が別の関数内で実行されるたびに特定のパラメータの値を格納する
- 8. zshは変数に格納されたコマンドを実行しますか?
- 9. hrefリンクと同時にフラッシュ関数を呼び出すと、フラッシュ関数は常に実行されますか?
- 10. スクリプト実行間のメモリにPHP変数を格納
- 11. イメージホバーは常に同じ位置に表示されます
- 12. 文字列に格納されたZEND実行/呼び出し関数
- 13. ASMインタープリタ:ローカル変数はどのように格納されていますか?
- 14. Apache Igniteに格納されたHashmapの同時実行に関する問題
- 15. メモリの静的変数はどこに格納されていますか?
- 16. 同じ行のローカル変数とグローバル変数にアクセスするbash
- 17. 変数に格納されたコマンドを実行する方法は?
- 18. 変数を変数に格納して実行する
- 19. jQueryのクリック関数にローカル変数を格納する方法は?
- 20. x86アセンブリ、メモリに格納された変数を追加する方法は?
- 21. Python:インポートされたモジュールに同じ名前の関数がある場合にローカル関数を呼び出す
- 22. グローバル変数に格納された関数は、呼び出されたときには実行されません。
- 23. Javascript:変数に宣言された関数を格納する方法は?
- 24. 変数はSQLサーバーにどこに格納されますか?
- 25. クラスの静的データメンバと静的関数メンバは、関数とグローバル変数の静的変数と同じ場所に格納されていますか?
- 26. 変数に名前が格納されている関数を呼び出すことはできますか?
- 27. 変数は常にdatagridviewにnull値を格納します
- 28. C - 異なる関数に入力された変数を格納する
- 29. メンバ関数はどこに格納されていますか?
- 30. プロパティファイルに格納された配列をJSP変数に配置する方法
特にスタックはありますか?この関数は、複数のスタックで呼び出すこともできます。 –