問題タブ [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.
java - 呼び出し API を使用した JNI メモリ管理
JNI メソッドを使用して Java オブジェクトを構築している場合、JNI 呼び出し API を使用して呼び出している Java メソッドにパラメータとして渡すために、そのメモリをどのように管理すればよいですか?
これが私が取り組んでいるものです:
より複雑なデストラクタ メソッドを持つ C オブジェクトがありますfree()
。この C オブジェクトは Java オブジェクトに関連付けられます。アプリケーションが Java オブジェクトで終了すると、C オブジェクトはもう必要ありません。
私は次のようにJavaオブジェクトを作成しています(明確にするためにエラーチェックを省略しています):
では、これで作業が完了したinstance
ので、何をすればよいでしょうか? 理想的には、ガベージ コレクションを VM に任せたいと思います。それが完了したら、私が提供したポインターinstance
も呼び出すと素晴らしいでしょう。c_object_destroy()
これは可能ですか?
別の関連する質問は、このようなメソッドで作成する Java エンティティのスコープに関係しています。class
、、、constructor
またはそれ以上を手動でリリースする必要がmethod
ありますか? JNI のドキュメントは、適切なメモリ管理に関して、イライラするほど曖昧です (私の判断では)。
c++ - C++ の浅いコピーに関する質問
intポインターメンバー変数「i」を持つ構造体「s」があるとします。s のデフォルト コンストラクターで i のヒープにメモリを割り当てます。後で、コードの他の部分で、s のインスタンスを値で関数に渡します。ここで浅いコピーを行っていますか?コピー コンストラクター、代入演算子、または s の何も実装していないと仮定します...ただの既定のコンストラクターです。
c - 呼び出す前にrealloc()の動作を決定する
私が理解しているように、より大きなメモリブロックを予約するように求められると、realloc()関数は次の3つの異なることのいずれかを実行します。
現在のブロックを拡張するのは非常に安価な操作なので、これを利用したい動作です。ただし、(たとえば)既存の文字列の先頭にcharを挿入したいためにメモリを再割り当てしている場合は、realloc()にメモリをコピーさせたくありません。最終的には、realloc()を使用して文字列全体をコピーしてから、手動で再度コピーして、最初の配列要素を解放します。
realloc()が何をするかを決定することは可能ですか?もしそうなら、クロスプラットフォームの方法で達成することは可能ですか?
c++ - 「新しい配置」にはどのような用途がありますか?
C++ の「placement new」を使用したことがある人はいますか? もしそうなら、何のために?メモリマップされたハードウェアでのみ役立つように思えます。
c - 標準ライブラリのみを使用してアライメントされたメモリを割り当てる方法は?
就職の面接の一環としてテストを終えたばかりで、Google を参考にしても、1 つの質問に困惑しました。StackOverflow のクルーがそれを使って何ができるか見てみたい:
この
memset_16aligned
関数には、16 バイトにアラインされたポインターを渡す必要があります。そうしないと、クラッシュします。a) 1024 バイトのメモリをどのように割り当て、それを 16 バイトの境界に合わせますか?
b) のmemset_16aligned
実行後にメモリを解放します。
c - 大量のチャーン、小さな割り当てのための効率的なヒープマネージャー?
非常に特殊な状況を処理するためのヒープマネージャーのアイデアを探しています。それぞれ12〜64バイトの範囲の非常に小さな割り当てがたくさんあります。それよりも大きいものは、通常のヒープマネージャーに渡すので、小さなブロックだけに対応する必要があります。4バイトのアライメントのみが必要です。
私の主な関心事は
- オーバーヘッド。通常のlibcヒープは通常、割り当てを16バイトの倍数に切り上げてから、別の16バイトヘッダーを追加します。これは、20バイトの割り当てで50%を超えるオーバーヘッドを意味します。
- パフォーマンス
1つの有用な側面は、Lua(このヒープのユーザー)がfree()を呼び出すときに解放するブロックのサイズを通知することです。これにより、特定の最適化が可能になる場合があります。
現在のアプローチを投稿します。これは問題なく機能しますが、可能な限り改善したいと思います。何か案は?
c - Cのポインターから配列のサイズを取得するにはどうすればよいですか?
次のようなmystruct
サイズの「配列」を割り当てました。n
後で、私は にしかアクセスできp
なくなりましn
た。ポインタだけを指定して配列の長さを決定する方法はありますp
か?
まさにそれを行うので、それは可能でなければならないfree(p)
と思います。私malloc()
は、割り当てられたメモリの量を追跡していることを知っています。それが長さを知っている理由です。おそらく、この情報を照会する方法はありますか? 何かのようなもの...
わかるようにコードを作り直す必要があることはわかっていますが、できればそうしn
たくありません。何か案は?
windows - UNIX と Windows のメモリ割り当て解除
私の理解では、UNIX では、メモリが解放されると、メモリはオペレーティング システムに返されず、次の malloc 呼び出しで再び使用されるプロセスにとどまります。
Windowsでは、メモリが実際にオペレーティングシステムに返されることを理解しています。
これら 2 つの方法に大きな違いはありますか? それとも、同じことを行う 2 つの方法が異なるだけですか? また、これら 2 つの方法に長所と短所があるとすれば、それは何ですか?
編集: 明確にしていただきありがとうございます。私はずっと、これは OS の問題だと思っていました (UNIX ライクなシステムではプロセスのサイズが縮小することは決してないように見えますが、Windows では縮小するためです)。
ruby-on-rails - メモリ使用量の数値を解釈する方法は?
誰かがこれを実際的な方法で説明できますか? サンプルは、Nginx と 3 つの Mongrel クラスターを使用した、トラフィックの少ない 1 つの Rails サイトの使用法を表しています。ページ キャッシングについて学ぶことを目指しているので、これらの数字がそのプロセスに重要な意味を持っているかどうか疑問に思っているので質問します。ありがとうございました。素晴らしいサイト!
c++ - ヒープ上のメモリを解放します。私はどうすればいいですか?
Windows Mobile アプリ用の CESetup.dll を作成しています。管理されていない必要がありますが、これについてはほとんど経験がありません。そのため、割り当てたメモリを解放する必要があるかどうか、およびその方法がわかりません。
ここに私が書いた関数があります:
私が理解しているように、folderPathはヒープに割り当てられています。EmptyDirectory() は、ディレクトリ内のすべてのコンテンツを削除する独自の関数です。RemoveDirectory() と DeleteFile() はシステム コールです。
私の質問はfolderPath
、関数が終了する前に割り当てを解除する必要がありますか? 必要な場合、どうすればよいですか?