問題タブ [memory-management]
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.
memory-management - スタックとヒープとは何ですか?
プログラミング言語の本では、値型はスタック上に作成され、参照型はヒープ上に作成されると説明されていますが、この 2 つが何であるかは説明されていません。私はこれについての明確な説明を読んだことがありません。スタックとは何かを理解しています。しかし、
- それらはどこにあり、何ですか (物理的には実際のコンピューターのメモリ内にあります)。
- それらは OS または言語ランタイムによってどの程度制御されますか?
- 彼らの範囲は何ですか?
- それぞれの大きさは何で決まるのですか?
- 何が速くなるの?
java - Java VM はメモリ内のオブジェクトを移動しますか? もしそうなら、どのように移動しますか?
Java 仮想マシンはメモリ内のオブジェクトを移動しますか? もしそうなら、移動したオブジェクトへの参照の更新をどのように処理しますか?
オブジェクトを分散方式 (つまり、複数のサーバーにまたがる) で保存するというアイデアを検討しているので質問しますが、効率上の理由からサーバー間でオブジェクトを移動する機能が必要です。オブジェクトは、リモートサーバー上のオブジェクトであっても、相互へのポインターを含むことができる必要があります。移動したオブジェクトへの参照を更新する最善の方法を考えようとしています。
これまでのところ、私の2つのアイデアは次のとおりです。
- オブジェクトが移動した場合に更新する、オブジェクトの存続期間中移動しない場所での参照間接化を維持します。しかし、これらの間接化はどのように管理されているのでしょうか?
- 各オブジェクトの逆参照のリストを保持して、オブジェクトが移動された場合に何を更新する必要があるかを把握します。もちろん、これによりパフォーマンスのオーバーヘッドが生じます。
これらのアプローチに関するフィードバックと、代替アプローチの提案に興味があります。
winapi - アプリケーションが消費しているアドレス空間の量を調べて、ユーザーに報告するにはどうすればよいですか?
私は、20 人余りのコーダー チームの一員として、アプリケーションのメモリ マネージャーを作成しています。メモリ クォータが不足しており、約 700Mb しか使用していないように見えるため、何が起こっているかを確認できる必要があります。フラグメンテーションなど、すべてがどこに向かっているのかを報告できるようにする必要があります。何かアイデアはありますか?
windows - 使用可能なページ ファイルは、Windows タスク マネージャーでどのように計算されますか?
Vista タスク マネージャーでは、使用可能なページ ファイルが次のようにリストされていることを理解しています。
Page File inUse M / available M
XP では、コミット チャージ制限としてリストされます。
利用
可能な仮想メモリ = 物理メモリの合計 + ページ ファイルの合計
しかし、私のマシンでは、物理メモリ = 2038M、ページ ファイル = 4096M、使用可能なページ ファイル = 6051 です。ここでは 83M が不明です。それは何のために使われますか。カーネルメモリの関係かなと思ったのですが、数値が合わないみたい?
これまでに見つけた情報:
- 詳細については、 http://msdn.microsoft.com/en-us/library/aa965225 (VS.85).aspx を参照してください。
- ページ ファイルのサイズは、[コンピューターのプロパティ]、[詳細設定]、[パフォーマンス設定]、[詳細設定] で確認できます。
c++ - スマート ポインター: オブジェクトの所有者は?
C++ はメモリの所有権、つまり所有権のセマンティクスがすべてです。
そのメモリを解放するのは、動的に割り当てられたメモリのチャンクの所有者の責任です。したがって、問題は本当に誰がメモリを所有するかになります。
C++ では、所有権は生のポインターが内部でラップされる型によって文書化されているため、優れた (IMO) C++ プログラムでは、生のポインターが渡されるのを見ることは非常にまれです (まれではありません)。誰がメモリを所有しているのかわからないため、ドキュメントを注意深く読まなければ、誰が所有権を持っているのかわかりません)。
逆に、生のポインターがクラスに格納されることはほとんどありません。各生のポインターは、独自のスマート ポインター ラッパー内に格納されます。(注:オブジェクトを所有していない場合は、オブジェクトを保存するべきではありません。オブジェクトがいつスコープから外れて破棄されるかがわからないためです。)
だから質問:
- 人々が遭遇した所有権のセマンティックのタイプは何ですか?
- これらのセマンティクスを実装するために使用される標準クラスは何ですか?
- どのような状況でそれらが役立つと思いますか?
回答ごとに 1 種類のセマンティック オーナーシップを保持して、個別に投票できるようにします。
概要:
概念的には、スマート ポインターは単純であり、単純な実装は簡単です。私は多くの試みられた実装を見てきましたが、それらは常に何らかの方法で壊れており、カジュアルな使用や例では明らかではありません. したがって、独自のスマート ポインターを展開するのではなく、ライブラリから十分にテストされたスマート ポインターを常に使用することをお勧めします。std::auto_ptr
または、Boost スマート ポインターの 1 つが私のニーズをすべてカバーしているようです。
std::auto_ptr<T>
:
1 人の人物がオブジェクトを所有しています。所有権の譲渡は許可されています。
使用法: これにより、所有権の明示的な譲渡を示すインターフェイスを定義できます。
boost::scoped_ptr<T>
1 人の人物がオブジェクトを所有しています。所有権の譲渡は許可されていません。
使用法: 明示的な所有権を示すために使用されます。オブジェクトは、デストラクタによって、または明示的にリセットされたときに破棄されます。
boost::shared_ptr<T>
( std::tr1::shared_ptr<T>
)
複数所有。これは単純な参照カウント ポインターです。参照カウントがゼロになると、オブジェクトは破棄されます。
使用法: オブジェクトが、コンパイル時に決定できない有効期間を持つ複数の権限を持つことができる場合。
boost::weak_ptr<T>
:
shared_ptr<T>
ポインターのサイクルが発生する可能性がある状況で使用されます。
使用法: サイクルのみが共有参照カウントを維持している場合に、サイクルがオブジェクトを保持するのを停止するために使用されます。
java - Windows XP メモリの断片化を表示/解決するためのツール
大量のヒープ スペースを必要とする Java プログラムがあります。(他のコマンド ライン引数の中で) 引数 -Xmx1500m で開始します。これは、1500 MB の最大ヒープ スペースを指定します。新たに再起動した Windows XP ボックスでこのプログラムを起動すると、問題なく起動して実行されます。しかし、プログラムが数回実行された場合、コンピューターがしばらく起動していた場合など、起動しようとすると次のエラーが発生します。
Windows自体がメモリの断片化に苦しんでいると思われますが、この疑いを確認する方法がわかりません. これが発生した時点で、タスク マネージャーと sysinternals procexp は 2000MB の空きメモリを報告します。内部フラグメンテーションに関連するこの質問を見てきました
最初の質問は、どうすれば自分の疑いを確認できるでしょうか? 2 番目の質問は、私の疑いが正しければ、この問題を解決するツールを知っている人はいますか? かなり調べましたが、マシンを定期的に再起動する以外に役立つものは見つかりませんでした。
ps - オペレーティング システムを変更することも、現在実行可能なオプションではありません。
c - Cのポインタを持つint行列 - メモリ割り当ての混乱
メモリ リークを発生させずに int マトリックスを生成する際に問題が発生しています。read_matrix() を使用して、特定の (グローバル) マトリックスを動的に任意のサイズにできるようにしたいと考えています。しかし、後でメモリを解放できるようにしたいのです。したがって、私のメイン メソッドでは、メモリが割り当てられていないため、2 番目の printf はバス エラーになるはずです。これを作成するにはどうすればよいですか?
iphone - Objective-C でのメモリ管理
私は C/C++ のバックグラウンドを持っており、Objective-C の動的な性質は私には少しなじみがありません。Objective-C のいくつかの基本的なメモリ管理テクニックについて誰かが私に指摘できる良いリソースはありますか? 元。保持、解放、自動解放
たとえば、Objective-C オブジェクトへのポインターを使用してそれを配列として扱うことは完全に違法ですか? データ構造に NSArray と NSMutableArray を使用する必要がありますか?
私はこれらがかなり初心者の質問であることを知っています.あなたが私に提供できる助けに感謝します.
c - メモリ割り当てエラーをシミュレートする方法
私の C アプリケーションは、独自のメモリ管理を行う 3rd ライブラリを使用しています。堅牢にするために、私のアプリケーションには、空きメモリ不足によるライブラリ関数の失敗に対処するコードがあります。
このコードをテストしたいと思います。そのためには、メモリ不足による障害をシミュレートする必要があります。
これにはどのツールが推奨されますか? 私の環境は Linux/gcc です。
python - どの Python メモリ プロファイラーが推奨されますか?
Python アプリケーションのメモリ使用量を知りたいのですが、具体的には、どのコード ブロック/部分またはオブジェクトが最も多くのメモリを消費しているかを知りたいです。Google 検索では、商用のものがPython Memory Validator (Windows のみ) であることが示されています。
そしてオープンソースのものはPySizerとHeapyです。
私は誰も試したことがないので、次の点を考慮してどれが最適かを知りたいと思いました。
ほとんどの詳細を提供します。
コードに変更を加える必要はほとんどないか、まったくありません。