問題タブ [stack-memory]
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 - 実行時にスタックサイズは大きくなりますか?
スタックサイズは、実行時にヒープのように大きくなる可能性があるのでしょうか。
c# - プロパティから値型を返す
クラスの値型プロパティに関して、スタックとヒープで何が起こっているのか混乱しています。
これまでの私の理解:
次のような構造体 (値型) を持つクラスを作成すると、次のようになります。
次のようにクラス インスタンスを作成する場合:
スタックとヒープは次のようになります。
...Bar 構造体がヒープ内の Foo クラスに埋め込まれている場所。これは私には理にかなっていますが、Foo オブジェクト内で BarStruct クラスの Number 整数を変更することを検討すると、それが失われ始めます。例えば:
私が理解しているように、これは BarStruct のコピーを返してスタック上に置く必要があります。つまり、BarStruct のメンバーの変更はオブジェクトに反映されないため、上記の最後の行でエラーが発生します。
ここまででいいの?
もしそうなら、私の質問は、どうしてこのような割り当てが来るのかということです:
...有効で、ヒープ値を変更しますか? 確かに、これはスタック上の値を変更しているだけですか?? また、(次第に)値型で new を使用できるのは非常に紛らわしいと思います。私にとって、new は (C++ のように) ヒープに割り当てるためのものであり、スタック上のアイテムに対してこれを行うのは不自然に感じます。
質問を繰り返しますが、構造体を含むプロパティが呼び出されたときに何が起こるか、新しい構造体をコピーに割り当てることができるのに、ヒープの参照が変更されるのはなぜですか?
これがすべて理にかなっていることを本当に願っています。
説明が必要な場合は叫んでください!
タ、
アンディ。
c# - c#構造体/クラススタック/ヒープ制御?
したがって、C++では非常に簡単です。クラス/構造体をヒープに割り当てる場合は、newを使用します。スタックに配置したい場合は、newを使用しないでください。
C#では、常に新しいキーワードを使用します。これが構造体であるかクラスであるかに応じて、スタックまたはヒープのいずれかに割り当てられます(構造体はスタックに、クラスはヒープに割り当てられます)。一部のアプリケーションでは、それらのオブジェクトだけが実際にそこに属するヒープに移動するように設計を変更すると、パフォーマンスに大きな違いが生じます。
私が疑問に思うのは、オブジェクトが構造体として宣言されているかクラスとして宣言されているかに関係なく、オブジェクトが割り当てられる場所を直接制御する方法はありますか?値型(構造体)をボックス化してヒープに移動できることは知っています(ただし、ボックス化/ボックス化解除にはパフォーマンスが犠牲になります)。スタックにクラスを割り当てる方法はありますか?
また、生のメモリを割り当てて、C ++の新しい配置のようなものを使用するメカニズムはありますか?これは管理の考え方に反することは知っていますが、カスタムメモリ管理を使用できる場合は、パフォーマンスに大きな違いが生じる可能性があります。
ガベージコレクターなどの便利さからC#が大好きですが、アプリケーションのボトルネックに取り組むときは、実際に何が起こっているかをより細かく制御することが望ましい場合があります。
ヒント/ヒントは大歓迎です:)
編集:パフォーマンスの例:
これは私のマシンで実行するのに1.8秒かかります(実際には割り当てのみが行われていることに注意してください-パラメーターの受け渡しはありません)
Foo1が構造体からクラスに変更された場合、実行には8.9秒かかります。それは5倍遅いです
c++ - C ++クラスは、スタックまたはヒープのどちらにあるかを判別できますか?
私は持っています
Fooが分離できるようにする方法はありますか?
と
Fooがスタックに割り当てられているかヒープに割り当てられているかに応じて、さまざまなことができるようにしたいと思います。
編集:
多くの人が私に「なぜこれをするのか」と尋ねてきました。
答え:
現在、参照カウントされたGCを使用しています。ただし、マーク&スイープも実行できるようにしたいです。このために、一連の「ルート」ポインターにタグを付ける必要があります。これらはスタック上のポインターです。したがって、クラスごとに、それらがスタックにあるのかヒープにあるのかを知りたいと思います。
kernel - プログラムスタックとヒープ、それらはどのように機能しますか?
実行中のすべてのプロセスの仮想メモリにページが関連付けられており、必要に応じてそれらのいくつかがメインメモリにロードされることを私は知っています。また、プログラムには動的メモリを割り当てるためのスタックとヒープがあることも知っています。これが私の質問です。
- スタックもメインメモリの一部のページの一部ですか?
- プログラムが待機状態に移行するとどうなりますか?スタックポインタ、プログラムカウンタ、その他の情報はどこに保存されていますか?
- なぜスタックが成長し、ヒープが成長するのですか?
- L1、L2キャッシュには、連続したメモリのチャンクを1つだけ含めることができますか、それともスタックとヒープの一部を含めることができますか?
これらのことをカバーする良い本をお勧めできますか?
java - プリミティブのJava配列はスタックまたはヒープに格納されていますか?
次のような配列宣言があります。
これはプリミティブ型a
の配列です。int
この配列はどこに保存されますか? ヒープまたはスタックに保存されますか? これはint
プリミティブ型です。すべてのプリミティブ型がヒープに格納されるわけではありません。
c++ - オブジェクトが関数内で静的に構築される場合、ヒープまたはスタックに割り当てられますか?
次のコードがある場合:
for (...) { A a; }
ヒープまたはスタックに割り当てられますか?
windows - Windows アセンブリ ヒープとスタック?
OS:Windows7 32bit
したがって、C++ と同様に、ヒープとスタックがあります。しかし、私は最近いくつかのアセンブリ学習を開始しており、そのようなものは何も見ていません。スタックだけですが、純粋なメモリのように見えます。では、ヒープとスタックの実装は c++ やその他の言語に固有のものですか? それとも、まだアセンブリにヒープとスタックが割り当てられていますか? 実行可能ファイルを起動するとき、プロセスにメモリを割り当てるという点でウィンドウは何をしますか? また、プロセスはどのようにして必要なスタック サイズを知るのでしょうか?
どうした
編集:おそらく誰かが CPU/OS によってプロセスのヒープとスタックメモリがどのように処理されるかについてのリンクを提供することができます
java - 基本的なJavaマルチスレッドの質問
オブジェクトがJavaでインスタンス化されるとき、それはインスタンス化されたスレッドにバインドされますか?あるスレッドにインターフェイスを匿名で実装し、それを別のスレッドに渡して実行すると、そのすべてのメソッドが元のスレッドで実行されるためです。それらが作成スレッドにバインドされている場合、それを呼び出すスレッドで実行されるオブジェクトを作成する方法はありますか?
.net - ヒープとスタックのスレッド化
新しいスレッドを生成する場合、メモリはどのように割り当てられますか?つまり、メモリヒープ、メモリスタック、およびスレッドはどのように関連していますか?これが基本的なもの(.net Frameworkの概念)であることは知っていますが、どういうわけか私はこの概念をあまり意識していません。