スタートアップ時に〜1GBのRAMが必要なプログラムを作成しましたが、これはコールドスタートから組み合わされた残りのプログラムよりも時間がかかります。 (これは単純なプログラムで、後続の実行にはほとんど時間がかかりません)。タスクマネージャーで監視するとRAMはほとんどなく、必要な1GBに達するまで約2MB /秒ずつ増加します。私はオプション「ヒープリザーブサイズ」と「ヒープコミットサイズ」を見つけて1000000000に設定しましたが、タスクマネージャーを使ってプログラムを見たとき、プログラムは1GBで開始し、その後2MB /秒で成長しますbad_allocを取得します。問題の行は次のとおりです。 std::vector<std::vector<char> > data(512, std::vector<byte>(2097252, 0));
これらのオプションが何であるかを明確に説明できる人がいれば、割り当てを高速化する方法があるでしょうか?私はhttp://msdn.microsoft.com/en-us/library/f90ybzkh(v=vs.80).aspxを読んだが、それは私が観察した動作を説明していない。MSVCヒープリザーブ/コミット
答えて
おそらく、最初の実行でRAMからハードドライブにページングする必要があるのに対し、後続の実行では最初の実行後に残っているすべての未使用のRAMがあるためです。割り当て/ゼロ設定はそれとは関係ありません。申し訳ありません。
メモリの割り当てによってスピードの問題が発生していません。あなたのスピードの問題は〜2MBのゼロを512回コピーすることによって引き起こされています。それらのプロパティを変更することはあなたを助けるつもりはありません。
std::vector
に依存するのではなく、メモリをゼロにする効率的な方法を調べます。少なくとも、2MBのデータのstd :: vectorをコンストラクタの引数として渡さないでください。デフォルトのコンストラクタで空のベクトルを512個作成し、それぞれを2 MBにリサイズします。少なくともそれはメモリコピーではありません。ほんの一束のメモリが書いている。
私はあなたが言うように、メモリをゼロにするより効率的な方法を調べますが、その後の実行では操作がほぼ瞬時に行われるため、これが問題であると私は疑うようです。私は家に帰るときにそれを覚えようとします。 –
割り当てがチョークポイントではないことを指摘してくれてありがとう。あなたはそれを理解するために正しい道を私に教えてくれました。 –
- 1. はMSVC
- 2. exiflib with MSVC++
- 3. MSVC++コンパイラエラーC2143
- 4. なぜMSVC
- 5. MSVCのデフォルトメモリアライメント8
- 6. ラベルのアドレス(MSVC)
- 7. vulkan vkresultリンカエラーmsvc
- 8. MSVC 2017 LNK2019エラーC++
- 9. GCC出力MSVCスタイルエラー
- 10. クラスクラッシュコンパイラのMSVC 2010テンプレートマップ
- 11. LNK2001 VS 2013(MSVC 18)ではなくVS 2015(MSVC 19)
- 12. '__builtin_return_address'に相当するMSVC
- 13. GCC vs variadicテンプレートコードのMSVCコンパイルエラー
- 14. MSVC++クラス構造体にキャスト
- 15. MSVC errnoスレッドの安全性
- 16. リリースモードのコンソールappentare QT MSVC 2015
- 17. MSVC 2017 15.5.0 - 垂直ブロックガイドライン
- 18. Qt + MSVC 2015 + Firebase SDK v1.0.0
- 19. MSVC 2008イミディエイトウィンドウナンセンスとコードの混乱
- 20. MSVC++ rand()とC#System.Randomの関係
- 21. MSVC++の "Buffer Security Check/GS"コンパイラオプションの理解
- 22. x64用のmsvcでlibsshをコンパイル
- 23. ビルドgtest for MSVC:32bitまたは64bit?
- 24. MSVC 2010コマンドラインの強制32ビットコンパイル
- 25. g ++とMSVCのC++引用の意味
- 26. MSVC++でアセンブリコードをコンパイルできますか?
- 27. MSVC++デバッグとリリース環境の相違点
- 28. 静的な.libファイル内のMSVCリストシンボル
- 29. コマンドsconsでビルド中のリンクエラーcompiler = msvc
- 30. MinGWツールでMSVCインポートライブラリを作成する
ヒープが間違っています。これはプロセスヒープであり、CRTヒープではありません。あなたのページファイルのようなサウンドは、古いXPマシンでは一般的なものではありません。 SysInternalsのPageDefragユーティリティを確認してください。 –
私は自分の質問に7時間以上答えられませんが、最初の実行でRAMからハードドライブへのページングが行われなければならないことに気付きました。後続の実行では、 。割り当て/ゼロ設定はそれとは関係ありません。申し訳ありません。 –