-4

私が取り組んでいる C++ プロジェクトに VC++ 10 を使用していますが、何らかの理由でオブジェクトを割り当てるたびに、システムが 4kb のメモリを割り当てます (オブジェクトの長さが数バイトであっても)。

総括する:

  • new/malloc を使用して小さなオブジェクトを割り当てると、オブジェクトごとに 4kb が割り当てられます。
  • 新しいプロジェクトでプロジェクト設定を確認しましたが、違いはありません。
  • このプロジェクトは、外部の C dll を使用し、エクスポートされた関数の宣言とその dll の構造を含むヘッダー ファイルをインクルードします。
  • テスト システムは Win7 x64 ですが、アプリケーションは x86 用にコンパイルされています

プロジェクトは非常に大きいですが、システムにそれほど多くのメモリを割り当てるように指示するディレクティブは見つかりませんでした。また、new/malloc に渡されたパラメータがオブジェクトの正しいサイズであることを確認できます。

これは、プロジェクト内のすべてのオブジェクト/構造で発生することに注意してください。

前もって感謝します。

4

1 に答える 1

1

x86 を使用していると仮定すると、メモリはページ サイズ以上のチャンクでのみメモリ アロケータの実装に割り当てることができ、デフォルトのページ サイズは 4 キロバイトです。

最初のオブジェクトのプロセス ワーキング セットに 4kb の違いが見られますが、そのページが使い果たされるまで、後続の割り当てには何も表示されません。

(これは、リリース モードでビルドしていることを前提としています。デバッグ モードでは、CRT はカナリア/境界チェックのためにオブジェクトごとにより多くのメモリを使用する場合があります)

于 2013-05-27T07:28:04.083 に答える