我寫了需要大約1GB的RAM歸零啓動時的程序,這是花更多的時間比計劃從冷啓動合併的其餘部分。 (這是一個簡單的程序,後續運行幾乎不需要分配任何時間)。當通過任務管理器觀看時,它幾乎沒有RAM開始,然後增長大約2MB /秒,直到它達到它需要的1GB。我發現了選項「堆預留大小」和「堆提交大小」,並將它們設置爲每個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堆保留/提交
2
A
回答
1
我意識到這可能是因爲第一次運行有網頁的東西了內存到硬盤驅動器,而隨後的運行已在第一次運行後留下的所有未使用的RAM。分配/調零與它無關。對不起所有。
3
你的內存分配不會導致你的速度問題。你的速度問題是由512MB零拷貝引起的。改變這些屬性不會幫助你。
我會調查歸零內存,而不是依靠std::vector
這樣做對你的有效途徑。或者,至少不要將2MB數據的std :: vector作爲參數傳遞給構造函數。讓默認構造函數創建512個空向量,然後將它們中的每一個調整爲2MB。至少那不會是內存拷貝;只是一堆內存寫入。
+0
我會研究更有效的方法來按照你的說法來零記憶,但由於在隨後的運行中該操作幾乎是即時的,因此對於我來說這似乎是個問題。我會盡量記得在我回家的時候。 –
+0
感謝您指出分配可能不是阻塞點。你讓我在正確的軌道上找出答案。 –
相關問題
- 1. .NET提交與保留堆大小
- 2. 在提交後保留值
- 3. jQuery Mobile:提交後保留數據
- 4. 提交後保留字段值
- 5. 下拉不保留在提交
- 6. 刪除提交,但保留更改
- 7. 提交表單並保留值設置
- 8. PHP提交後保留價值
- 9. 提交後保留所選下拉值
- 10. 保留提交的JSP表單數據
- 11. 表格提交後保留div值
- 12. 保留在提交的表格
- 13. Git的 - 保留工作,無需提交
- 14. 保留表格提交後的值
- 15. 提交表格後保留下拉值
- 16. PHP提交後保留選擇選項
- 17. PHP提交後保留表格值
- 18. 表單提交後保留模型
- 19. 在提交期間保留Perforce信息
- 20. 保留複選框值上提交
- 21. 在php提交後保留表單值
- 22. Rails:在提交後保留參數
- 23. 提交後保留選擇框值
- 24. 本地保留提交克隆Git
- 25. 表格提交後保留URL參數
- 26. Codeigniter如何提交後保留價值
- 27. svn撤銷舊提交,保留新提交
- 28. 堆棧保留大小和堆棧提交大小是否會增加提高應用程序性能?
- 29. 淺堆和保留堆都是0
- 30. 提交後留言
錯誤堆,這是進程堆,而不是CRT堆。聽起來你的頁面文件有麻煩,在舊的XP機器上很常見。查看SysInternals的PageDefrag實用程序。 –
我不能回答我自己的問題七個小時,但我意識到這可能是因爲第一次運行必須將內存頁面內容分頁到硬盤驅動器,而後續運行有第一次運行後留下的所有未使用的RAM 。分配/調零與它無關。對不起所有。 –