問題タブ [stack-frame]

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.

0 投票する
3 に答える
1115 参照

objective-c - スタック-フレーム-Objective-Cのヒープ

このサイトで見つけたすべての質問はStackvsのみを参照しHeapており、説明はしていませんFrame。ここに私の質問があります。3つすべての違いを理解しないでください。

私が知っていること:

Frame:Aframeは、関数のインスタンス変数の黒板のようなものです。関数の実行中、すべてのインスタンス変数はframeその関数の内部に格納されます。関数が呼び出されると、その frame上に作成されstackます。

Stack:Aはの物理としてstack視覚化できます。メソッド(または関数)が実行されると、からメモリのチャンクが割り当てられます。stackframesstack

Heap:すべてのオブジェクトポインタはに存在しheapます。

スタックとフレームは明確です(私は思います)が、私は私のHeap声明に正しいですか?

0 投票する
2 に答える
533 参照

c# - Silverlight のメソッドからメソッド名を取得できないことがある

Silverlight クライアントからのエラーをログに記録する次のメソッドがあります。

私の問題は、アプリを実行して例外をスローするメソッドを呼び出すと、次のようにログに記録されることです。

しかし、通常の (開発者以外のランタイム) を持っている人がこのアプリを実行し、例外をスローすると、次のようにログに記録されます。

これは、SDK Silverlight ランタイムによるものだと推測しているだけです。ほとんどの同僚が Silverlight SDK をインストールしているため、判断が難しいです...これがこの異常の理由であるかどうかを誰か確認できますか?

解決しました!

SDK ランタイムによるものではなく、匿名メソッドを呼び出したからです。次のコード行を追加しました。

これがリソースをどれだけ消費するかについては心配していません。なぜなら、例外が発生した後、ユーザーは何をしていても停止してサポートに連絡するからです。

0 投票する
1 に答える
942 参照

assembly - アセンブリx86に新しい命令を挿入するときのスタックフレームサイズ?

スタックフレーム内にアセンブリx86コードに新しい関数と命令を挿入する場合、スタックサイズを増やす必要がありますか?はいの場合、いくらですか?

0 投票する
1 に答える
179 参照

python - Pythonで関数スタックデータをリリースするのはいつですか?

次のコードのテストについて、これについて質問があります。

1、

2、

  1. file_close_testが終了すると、ファイルオブジェクトへの参照がないため、ファイルオブジェクトが閉じられました。
  2. 例外が発生した後、ファイルオブジェクトが閉じられていないため、関連するスタックデータが解放されていないと思います。
  3. exception_wrapperの終了後、ファイルは自動的に閉じられました。

これを説明してもらえますか?ありがとう。

0 投票する
2 に答える
124 参照

python - Pythonクラススタックフレームの制限

次の形式のクラスがある場合:

関数を呼び出すことができる回数に制限はありますか?例えば:

getNewObject()の戻り値を呼び出すことができる回数に制限はありgetNewObject()ますか?もしそうなら、どのような要因がこれに影響しますか?

0 投票する
1 に答える
11274 参照

assembly - この場合のOllyDbgとアセンブラーのEBP+8はどういう意味ですか?

文書化されていない関数の使用方法を学ぶために、OllyDbgでアセンブラーとデバッグのスキルを学んでいます。今、私は次の問題を抱えています:

私は次のコード部分を持っています(OllyDbgから):

これが関数の始まりであり、目標はデータ構造を見つけることです。そのため、最初にEBPをスタックにプッシュし、次にESP(現在のスタックポインター)をEBPに移動して、関数のスタックフレームを定義していることがわかりました。チュートリアルでは、一般的なレイアウトでは、最初の引数は[EBP + 8]に配置され、2番目の引数は[EBP+C]に配置されると書かれています。

これは私が理解していないことです。最初のパラメーターがEBP+8に配置されていることをどのように知ることができますか?

誰かが私を助けてくれることを願っています!ありがとう!

0 投票する
4 に答える
11805 参照

java - スタックの一番下を表示するためにJavaスタックトレースのサイズを拡張する方法は?(スタックオーバーフローのトリガー)

Javaでは、完全な、切り捨てられていないスタックトレースを表示する方法はありますか(たとえば、記録されるフレームの数を増やすことによって)、またはスタックトレースの一番下に表示する方法はありますか?通常、スタックトレースは、1024フレームの価値で上から切り捨てられますが、スタックオーバーフローの問題の場合、再帰をトリガーした呼び出しを誰が行ったかを下の方で確認する必要があるため、これはかなり価値がありません。スタックの途中で切り捨てる方がはるかに優れていますが、SunのJVMはこれを行うのに十分なほど賢くないようです。

おそらく、いくつかの特別な太陽固有のフラグでさえありますか?スタックサイズを最小許容値(-Xss1000)に減らしてみましたが、それでも1024フレーム以上の価値があります。

私の場合、Hadoopマッパーで発生するスタックオーバーフローをデバッグしようとしていますが、これは非常に大きな入力で実行している場合に限られます。問題が発生するのは、再帰操作(ScalaのfoldRight)が非常に大きなリンクリストで実行されているためだと思います。非再帰的に書き直す必要があります...しかし、誰がを呼び出したかを知る必要がありますfoldRight。これは、多くの場所で直接的および間接的に呼び出される基本的なルーチンであり、私が使用しているコードはたくさんあるので、これは非常に明白ではありません。

0 投票する
2 に答える
710 参照

c - サブスコープを持つ関数のスタック フレーム構造

{}以下は、関数内に存在 するサブ スコープ (または) ダミー スコープ (単に ) がスタック フレームの構造にどのように影響するかを理解するために参考にしたコードです。

サンプル出力

以上の行動から、以下のように推測します。

  • スコープのスタック フレームの作成はありません{}
  • このようにしてauto、宣言/定義された変数とmainサブスコープ内の変数{}は同じスタック フレームを共有します。
  • したがって、 で宣言/定義された変数はmain、関数内のどこでも (サブ スコープ内であっても) 自由にアクセスできます。
  • 一方、サブスコープで宣言/定義された変数は、ブロックの外でそのスコープを失います。ただし、スタックフレームが存在する限り、その有効期間は有効です。

質問:上記の点が正しければ、同じ変数の複数の定義 (1 つは 内main、もう1 つは 内) を指定しても、コードが失敗しないのはなぜですか{}

0 投票する
1 に答える
8844 参照

performance - フレームポインタを省略すると、パフォーマンスにプラスの効果があり、デバッグ能力にマイナスの効果がありますか?

ずっと前にアドバイスされたように、私は常にフレーム ポインターを使用せずにリリース実行可能ファイルをビルドします (/Ox でコンパイルする場合の既定値です)。

ただし、今、論文http://research.microsoft.com/apps/pubs/default.aspx?id=81176を読みましたが、フレーム ポインタはパフォーマンスにあまり影響を与えません。そのため、完全に最適化 (/Ox を使用) するか、フレーム ポインターを使用して完全に最適化 (/Ox /Oy- を使用) しても、実際にはパフォーマンスに違いはありません。

Microsoft は、フレーム ポインター (/Oy-) を追加するとデバッグが容易になると指摘しているようですが、これは本当ですか?

私はいくつかの実験を行い、次のことに気付きました。

  • 単純な 32 ビット テスト実行可能ファイル (/Ox /Ob0 を使用してコンパイル) では、フレーム ポインターを省略するとパフォーマンスが向上します (約 10%)。ただし、このテスト実行可能ファイルは、いくつかの関数呼び出しのみを実行し、他には何も実行しません。
  • 私自身のアプリケーションでは、フレーム ポインターの追加/削除は大きな影響を与えないようです。フレーム ポインターを追加すると、アプリケーションは約 5% 高速になるようですが、誤差の範囲内である可能性があります。

フレームポインタに関する一般的なアドバイスは何ですか?

  • それらは実際にパフォーマンスに良い影響を与えるため、リリース実行可能ファイルでは省略 (/Ox) する必要がありますか?
  • デバッグ機能を向上させるため (クラッシュ ダンプ ファイルを使用してデバッグする場合)、リリース実行可能ファイルに追加 (/Ox /Oy-) する必要がありますか?

Visual Studio 2010 を使用しています。

0 投票する
3 に答える
498 参照

c - main()がmain()を呼び出すと、スタックフレームはどうなりますか

次のコードを検討してください。

コンパイル:

実行する:

ここで、main()はself()を呼び出しています。

関数の元のスタックフレームは、それ自体が呼び出されるmain()たびに上書きされるようです。main()

しかし、差出人住所はどうなりますか?関数はそれ自体のスタックフレームに戻ることができますか?

この疑問を明確にするのを手伝ってください。

ありがとう。