問題タブ [memory-pool]

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 投票する
2 に答える
1002 参照

c++ - オーバーロードされたプール演算子の削除をどのように宣言して使用しますか?

C++-FAQ-lite のセクション 11.14を配列に適用する方法を知りたいです。

基本的に、私は次のようなものが欲しいです:

ただし、 this を宣言して呼び出すための正しい構文を理解できませんでしたoperator delete[] (pool)。誰でもここで助けることができますか?

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

c - タイプごとよりもインスタンスごとのメモリプールの欠点はありますか?

リアルタイムアプリケーション用にCでメモリプールを実装しています。コンテナデータ構造は、プログラムのリアルタイムスレッドによって使用され、コンテナに追加およびコンテナから削除する必要のある特定のタイプのデータを処理します。コンテナの実装は、各インスタンスが独自の個人用メモリプールを持つように設計されています。(データはリアルタイムスレッドで処理されますが、コンテナーの実際の作成は別のスレッドで行われます)。

プログラムの起動時にコンテナのデータ構造の数がわからないため、このインスタンスごとのモデルには、必要なだけのメモリが使用されるという利点があります。コンテナが保持できるデータの最大量に制限を設けることはかなり合理的です。 、ただし、コンテナの数に制限を設けることは、かなり恣意的です。

しかし、インスタンスごとのメモリプールには欠点がありますか?

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

c++ - 非断片化静的メモリ プールの設計とコーディング

以前にこの用語を聞いたことがあるので、設計とコーディングの方法を知りたいです。
可能な場合、STL アロケーターを使用する必要がありますか?
OS のないデバイスでどのように実行できますか?
それを使用することと、malloc/new を実装した通常のコンパイラを使用することのトレードオフは何ですか?

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

c# - どのオブジェクトプールバッキングストアを選択しますか?

C#(.NET 4.0)アプリケーションでは、さまざまなサイズのチャンクで大量のメモリを割り当てたり、割り当てを解除したりします。パフォーマンスを向上させるために、オブジェクトプールに移動したいと思います。

すでにオブジェクトプールを実装しており、パフォーマンスがいくらか向上しています。現在、スタックベースのバッキングストアを使用しています。他の可能な選択肢は、キューベースのストア、ConcurrentBag <>ベースのストア、List<>ベースのストアなどです。

バッキングストアの選択は、実際にはアプリケーションの特性に依存していると思います。そのため、現在、これらすべての異なるバッキングストアを使用してオブジェクトプールを実装し、パフォーマンスをテストしています。

ただし、オブジェクトプーリングのさまざまなバッキングストアの長所と短所についてのご意見をお聞かせください。

ありがとう

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

c++ - ノンブロッキング スレッドセーフなメモリ プールの実装

単純なノンブロッキングの静的ブロック サイズのメモリ プールが必要でした。私はウェブ上でそのようなものを見つけませんでした。だから、そのような解決策を必要とするすべての人。これは無料です... Win32でのみ動作します。

よろしくお願いします、

フリードリヒ

そして、CompareAndSwap

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

c++ - サブクラス化によるC++メモリプーリング

そのため、プールする必要のあるクラスに最小限の変更を加えるだけで、c++オブジェクトを簡単にメモリプールする方法に取り組んでいました。

メモリプール自体はどこでも見つけることができる標準的な種類ですが、私はこのクラスを作成しました:

利用方法:

returnMemory呼び出し(基本的にプールの一部を解放します)をdelete演算子に入れたかったのですが、void*引数から実際のプールのアドレスを取得する方法がわかりません。

代わりに、デストラクタに入れて解決しました。コンストラクターは、クラスがプールを使用して割り当てられることを義務付けていると思います。つまり、破棄は常に割り当て解除が続くことを意味します。

これは最初の実用的なソリューションであり、使用するのに非常に便利です。しかし、それを行うのはおそらく悪いスタイルであり、問​​題に対するより良い解決策があるかどうか私は興味があります。

誰か知っていますか?

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

java - Java のガベージが多すぎる問題

私はアプリケーションに、基本的に、新しいバイト配列 (1K 未満) を作成し、数秒 (通常は 1 分未満ですが、一部のデータは最大 1 時間保存されます) 後にデータをディスクに書き込み、データはゴミになります。1 秒あたり約 400 パケットが作成されました。GC について特に心配する必要はないという記事をいくつか読みましたが、特にメモリ部分をすばやく作成して解放しました (Java 6 で)。GC の実行時間が長すぎると、アプリケーションで問題が発生します。いくつかの GC パラメータ (より大きな XMX と ParallelGC) を設定しました。これにより、完全な GC 時間は減少しますが、まだ十分ではありません。私は2つの考えを持っています.GCパラメータに焦点を合わせていますか、それともバイト配列メモリプールメカニズムを作成していますか? どちらの方がよいですか?

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

c++ - C ++でのメモリ割り当てを減らすために、可変サイズのキャッシュオブジェクトをどのように実装しますか?

パフォーマンスの前に人々は私の頭を引き裂きます:はい、私はこれを尋ねる前にプロファイリングを行いました:)

私はもう一度タイプコンテナの1つを調べていますが、機能するソリューションはありますが、キャッシュされるアイテムのタイプごとにヒープに個別に割り当てられるため、パフォーマンスが低下します(もちろん高価です)。

プログラムの入力の静的分析に基づいて、渡されるキャッシュオブジェクトに配置される可能性のあるすべてのオブジェクトに必要な合計サイズを知る方法を見つけました。基本的に、特定のキャッシュオブジェクトで構築できるオブジェクトのリストがあるので、キャッシュする必要がある可能性のあるサイズは事前にわかっていますが、コンパイル時ではなく、実行時のみです。

基本的に、私がやりたいのは、1つのメモリブロックを取得し、同じメモリブロック内にビットと制御対象オブジェクトをboost::make_shared構築することです。shared_ptr

キャッシュオブジェクトはコピー不可能であり、クライアントによってポインタによって渡されるため、コピー動作を維持することを心配する必要はありません(通常は、ptr_vectorまたはのようなものに格納されますstd::auto_ptr)。

ただし、そのようなコンテナをどのように正確に実装するか、つまり、配置制限などに従う方法についてはよくわかりません。

擬似コードで、私がやりたいこと:

私の一般的なコンセプトはここに聞こえますか?これを達成するためのより良い方法はありますか?

0 投票する
5 に答える
4054 参照

c# - C#で配列の中央へのポインタを取得する方法

まず、環境に関する基本情報: Win7-x64 で 32 ビットをターゲットとする c# .net 4.0 を使用しています。

事前に割り当てられた大規模な配列があります。関数では、この配列内の任意のポイントへのポインターを返したいので、呼び出し元の関数はどこに書き込むかを知ることができます。元:

基本的に、メモリの大きなチャンクを事前に割り当て、このメモリ ブロックの任意の長さの部分を予約し、他のクラス/関数がメモリのその部分を使用できるようにします。

上記の例では、getEmptyPtrLocation 関数が正しくありません。Byte[] を返すと宣言されていますが、1 バイト値を返そうとしています。

ありがとう

0 投票する
5 に答える
609 参照

c++ - バッファへのポインタを無効にせずにバッファを拡張する方法は?

ここでは、「プール」と「バッファ」という用語を同じ意味で使用できます。
常に呼び出すとは限らないため、プログラムの開始時に割り当てたいプールがあるとしますnew
ここで、プールのサイズを人為的に制限したくはありませんが、より大きなプールを再割り当てすると、古いプールへのすべてのポインターが無効になります。これは確かにあまりクールではありません。


私が考えた1つの方法は、別名「ページング」でした

また、1 ページだけを再割り当てするのではなく、新しいページを割り当てます。これにより、すべてのポインターが有効なままになりますが、ページ プールの管理が少し難しくなります。また、私はページ数を制限しているので、最終的にはプールのサイズについても同様です。


別の方法は、割り当て関数が返すポインタから実メモリ空間へのポインタへのマッピングを行うことでした。これにより、すべての古いポインターが有効なままになりますが、より多くのメモリが必要になり、マッピングを行う割り当て関数から戻るスマート ポインターを作成する必要があります。


私が望むものを達成するために他にどのような方法がありますか? 上記の実装例で見逃した (欠点) 利点は何ですか?