タグ付けされた質問 「heap」

6
Javaのスタックメモリとヒープメモリ
私が理解しているように、Javaでは、スタックメモリはプリミティブとメソッド呼び出しを保持し、ヒープメモリはオブジェクトの格納に使用されます。 クラスがあると仮定します class A { int a ; String b; //getters and setters } aクラスのプリミティブはどこAに格納されますか? ヒープメモリが存在するのはなぜですか?なぜすべてをスタックに保存できないのですか? オブジェクトがガベージコレクションされると、オブジェクトに関連付けられたスタックは破棄されますか?

6
スタックですべてをより効率的に行うことができるのに、なぜヒープが必要なのですか?
これは実際、昨日私が今日使用するアプリケーションでスタックとヒープの両方が必要な理由について質問したことと、単純な&通過する単一の標準)。 ただし、応答の多くは、ヒープの割り当て/参照を試みるよりも数百(または数千)倍高速であるため、スタックはかけがえのないものであることを示しました。ヒープを廃止すると動的ストレージ割り当てに問題があることはわかっていますが、これを回避する方法はありませんか、またはおそらくスタックを改善して動的メモリ割り当てを処理できるようにする方法はありませんか?
24 stack  heap 

2
スタックとヒープのサイズはOSによってどのように制限されますか?
注:特定のOSが回答できるようにする必要がある場合は、Linuxを検討してください。 プログラムを実行するたびに、スタック用の領域とヒープ用の領域を備えた、実行する仮想メモリ空​​間が与えられます。 質問1:スタックとヒープに静的なサイズ制限(たとえば、それぞれ2ギガバイト)がありますか、またはこの制限は動的で、プログラムの実行中にメモリ割り当てに従って変化します(つまり、使用される合計4ギガバイト)両方なので、プログラムがスタックのみを使用する場合、4ギガバイトのスタックを持つことができますか? 質問2:制限はどのように定義されますか?使用可能なRAMメモリの合計ですか? 質問3:テキスト(コード)セクションとデータセクションについてはどうですか、どのように制限されていますか?
21 linux  memory  stack  heap 

5
C ++よりも高速なJavaヒープ割り当て
私はすでにこの質問をSOに投稿しましたが、大丈夫でした。それは残念ながら閉じられました(再開するには1票しか必要ありません)が、誰かが私がここに投稿することを提案したので、それはより適切なので、以下は文字通り質問のコピーペーストです この答えに関するコメントを読んでいたこの引用を見ました。 オブジェクトのインスタンス化とオブジェクト指向の機能は、最初から設計されているため、非常に高速です(多くの場合、C ++よりも高速です)。コレクションは高速です。ほとんどの最適化されたCコードであっても、標準Javaはこの領域で標準C / C ++に勝ります。 あるユーザー(私が追加する可能性のある非常に高い担当者)は、この主張を大胆に擁護し、 Javaでのヒープ割り当てはC ++よりも優れています Javaでコレクションを守るこのステートメントを追加しました また、主にメモリサブシステムが異なるため、JavaコレクションはC ++コレクションに比べて高速です。 だから私の質問はこれのどれでも本当に真実でありえ、もしそうなら、なぜJavaのヒープ割り当てがそんなに速くなるのかということです。


3
良いC可変長配列の例[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 この質問はSOでかなりフリーズしたレセプションを得たので、そこで削除して代わりにここで試すことにしました。ここにも当てはまらないと思われる場合は、少なくとも私が求めている例を見つける方法の提案についてコメントを残してください... C99 VLAを使用することで、現在の標準ヒープを使用するC ++ RAIIメカニズムなどよりも優れた例を挙げていただけますか? 私が後の例は次のとおりです: ヒープを使用するよりも簡単に測定できる(おそらく10%)パフォーマンスの利点を実現します。 アレイ全体をまったく必要としない、適切な回避策はありません。 実際には、最大サイズを固定する代わりに、動的サイズを使用するメリットがあります。 通常の使用シナリオでスタックオーバーフローが発生することはほとんどありません。 C ++プロジェクトにC99ソースファイルを含めるためのパフォーマンスを必要とする開発者を誘惑するのに十分な強さである。 文脈上のいくつかの明確化を追加:C99の意味と、標準C ++に含まれていないように私は、VLAを意味:int array[n]どこn変数です。そして、私はそれが他の標準(C90、C ++ 11)によって提供される代替手段に勝るユースケースの例の後にいます: int array[MAXSIZE]; // C stack array with compile time constant size int *array = calloc(n, sizeof int); // C heap array with manual free int *array = new int[n]; // …
9 c++  c  stack  heap 

3
カスタムヒープアロケーター
ほとんどのプログラムは、関数型プログラミング言語が古いオブジェクトを変更するよりも新しいオブジェクトを割り当てることを好み、ガベージコレクターが解放することを心配する程度にまで、ヒープの割り当てについてかなりカジュアルになり得ます。 ただし、組み込みプログラミングのサイレントセクターでは、メモリとリアルタイムの制約により、ヒープ割り当てをまったく使用できないアプリケーションが数多くあります。処理される各タイプのオブジェクトの数は仕様の一部であり、すべてが静的に割り当てられます。 ゲームプログラミング(少なくともハードウェアのプッシュに意欲的なゲームでは)は、その中間になることがあります。動的割り当てを使用できますが、アロケーターをブラックボックスとして処理できない十分なメモリとソフトリアルタイム制約があります、ガベージコレクションはもちろんのこと、カスタムアロケータを使用する必要があります。これが、ゲーム業界でC ++が依然として広く使用されている理由の1つです。http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.htmlのようなことができます その中間の領域には他にどのようなドメインがありますか?ゲームとは別に、カスタムアロケーターが頻繁に使用されていますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.