2011-07-02 6 views
0

現在、私のプログラムでヒープに問題があります。私は解決策を見つけるために私の方法をインターネットで検索していましたが、ヒープ割り当てのためのいくつかのリンカオプションについて私が理解していないページをMSDNから見つけました。Visual C++/HEAPリンカーオプション

The documentation says that you can set the Heapsize with /HEAP

私はいつもスタックのサイズが固定されていることを知っていました。しかし、私はいつも、ヒープの大きさが変わると思っていました。もっと混乱を加えるために、私はデフォルト値が1MBであることを発見しました。私は1 MB以上のメモリを使用するプログラムをたくさん書いています。

正確には/ HEAPオプションはどうしますか?

おかげ

+0

インテリアコンパイラの賢明なデフォルトに疑問を投げかけていく前に、「何か問題がある」ことを教えてもらえますか? –

+0

ここで私のヒープのトラブルに関する質問があります:http://goo.gl/KYMRj しかし、私はおそらく同様の問題を避けることができるので、将来どのように動作するのか理解したいと思います。 – Compuholic

+0

どこから来ているのかを知ることは不可能です。なぜなら、あらゆる種類の詐欺行為を行った可能性のある外部関数呼び出しを使用しているからです。できるだけ完全で最小限の自己完結型の例を投稿すれば、管理可能なものに集中することができます。 –

答えて

1

windowsは、メモリのページに読み取り/書き込みアクセスを与えることによって.exes(プロセス)メモリを与えます。 C++プログラマーには、オペレーティングシステムに任せて、決して混乱させないでください。

/HEAP 1,000,000は、.exeが1,000,000バイト分のページで起動することを意味します。この値を変更しても影響はありません。 Windowsは自動的にメモリにページングします。これは、ウィンドウがこのプロセスにパフォーマンスのために必要なメモリを与えるヒントです。

1

私は、あなたがこのリンカオプションで設定された順番に、PEヘッダーによって制御されているOSのヒープ(HeapAlloc機能)混乱していると思うし、あなたのC++ランタイムライブラリのダイナミックアロケーション(mallocnew)をおそらくVirtualAllocを使用してOSからメモリを直接取得し、OSヒープを使用しないでください。

OSヒープパラメータの詳細については、CreateHeapのMSDNドキュメントを参照してください。