2012-03-12 25 views
1

現在、私はプロセスごとのメモリ制限の解決策を進めています。だから私は共有メモリに来た。まず、私は開発者のプラットフォームとしてVisual StudioでWindows 7を使用しています。このソフトウェアは、複数のCPUと膨大なメモリを備えた最新のWindowsサーバーシステム上で動作します。ウィンドウ内の共有メモリ制限(C++)

まあ、私は自分のプロセスごとのメモリ制限について知らせてくれました。もっと多くのメモリにアクセスする必要があります。だから私の考えは、複数のプロセスを作成し、共有メモリを使用することでした。

しかし、共有メモリをたくさん作成するのは本当にいいですか?パフォーマンスはどうですか?

+1

もしあなたが64ビットにするなら、あなたの限界はマシンに詰め込むことができるRAMの量だけでしょう。答えは言ったように、私はあなたが共有メモリを持つ複数のプロセスから利益を得るつもりはないと思います。制限は、プロセスごとのアドレススペースサイズ、物理RAMの量、およびページファイルサイズです。 64ビットはこれを多く助けます。 – Nerdtron

+0

@Nerdtron:利用可能なRAMの容量よりもはるかに多くのメモリにアクセスすることができます。これが仮想メモリ全体のポイントです。物理メモリの量より多くの仮想メモリを使用している場合、OSはメモリのページをディスクに自動的にスワップします。アドレス空間がより小さい場合は、これを自分で行う必要があります。 –

+0

@AndréCaronはい私はそれを理解し、私のコメントがそれを説明していると思った。アドレス空間サイズ、物理RAM、およびページファイルサイズは3つの制御要因です。私が言っていたことは、OPによって示唆されているように、共有メモリを持つ複数のプロセスがそれらを避けていないということです。 – Nerdtron

答えて

2

それはあなたの目標をカバーする必要がどのようなものの(下に説明したが)特定のに合わせたカスタムエンジニアリングソリューションである要件として聞こえます。スタックオーバーフローは、専門的な明快さとプログラムの例を求めている開発者やソフトウェアエンジニアにとって非常に有用ですが、適用可能なハイレベルエンジニアリングがあれば、簡単に見つけられない可能性があります。あなたの投稿からあまりにも多くの前提を作ることができます。

複数のプロセッサ上のRAMおよび/または複数のスレッドの量は、そのようなシステムを構築するのに苦労した経験のあるユーザーにとっては最善の方法です。私は自分自身の分野で何年も持っており、自分自身がその特定の経験を欠いていることを自信を持って表現することができます。正直なところ、高ドルのハードウェアは一般的に高圧スケジュールに参加するため、そのような事態を避けることを望んでいます。それは他の問題にもつながります。でも、私はほんの少しを推測するだろう - あなたの意思をしっかりと私の一次推測があるWindowsプラットフォームを利用すると、固定されている場合、それはあなたに...

何も費用はかかりません理由だけであれば:

  • クラスタ化されたサーバー(多量のスレッドを処理するための多くのマルチコアプロセッサー、利用可能なRAMの膨大な量に裏打ちされた)
  • ハードウェアの最先端ハードウェア - 頻繁に仮想メモリへのアクセスの影響を最小限に抑えたい場合は、スピンドルドライブを文字通りより雄弁なDRAMスティック、すなわちソリッドステートドライブに置き換えることを可能にする特定の最先端のハードウェアオプションをターゲットにする必要があります現代のiPodやモバイルPDAでよく見かける簡単なタイプ...古典的なソリッドステートドライブ - 私は本物を参照してください[one fine example is here - ハードウェアの下に見えます]。その製品は、スピンドルドライブより2〜3桁高速であり、消費者のソリッドステートよりもはるかに高速です(安価ではありません)。

あなたの目標は、コストが大きな問題ではないことを示していますが、より具体的な情報が不足している間に私があなたに与えることができるほど良いことです。

エンジニアの助けを求めるときは、達成しようとしているもの(目標)を正確に伝えるのが一番です。彼らがオプションを提供し、現実と現代技術の限界をあなたのジレンマとあなたの財務目標に合わせることができます。多くの場合、難解で偏心のある要件であっても、最良の解決策は、実際には「外箱」のエンジニアリングソリューションであり、ブルートフォースアプローチよりもはるかに安価に構築/実装できます。別の言い方をすれば、は、エンジニアがあなたに手助けをするのを助けます。 GIGOの原理も同様に適用されます。

私が提供したものが有用であることを心から祈っています。がんばろう。

4

私はプロセスごとのメモリ制限について自分自身に知らせました。もっと多くのメモリにアクセスする必要があります。だから私の考えは、複数のプロセスを作成し、共有メモリを使用することでした。

プロセスあたりのメモリの制限は、仮想メモリです。これは、基本的に、address spaceの最大サイズ(32ビットポインタのあるシステムでは4ギガバイト)があることを意味します。共有メモリはあなたのアドレス空間へのメモリのマッピングなので、あなたが持っている問題からあなたを救う方法はありません。

メモリブロックを複数のプロセスに配布すると、物理メモリの制限に達し、システムのパフォーマンスが低下することに注意してください。

システムに必要なメモリが本当に必要な場合は、データをディスクに保存する必要があります。メモリマップされたファイルを使用すると、メモリブロックをアドレス空間の内外に素早くスワップできます。 AURUS @