我正在調試一個崩潰的程序,因爲沒有連續的內存可以用於我的向量,需要重新分配。所以我有一個問題,如何不使用虛擬內存?虛擬內存可以用哪種方式使用?謝謝。何時會使用虛擬內存(窗口)?
回答
虛擬內存由操作系統自動使用。你不需要關心這一點。
就你而言,很可能你運行的是32位應用程序。 Windows中32位進程的用戶地址空間限制爲2 GB(如果使用特定密鑰引導Windows,則3 GB)。如果你的向量需要超過幾百兆的連續地址空間,這可能會成爲一個問題(由於地址空間碎片)。
當然,任何進程可能會耗盡內存(即使在使用虛擬內存和交換文件以及其他任何內容時)。在任務管理器中查看程序的內存使用情況。
目前使用300MB內存,那麼這需要重新分配。是的,它是32位應用程序。 Thannks。 – user1558064
虛擬內存是您在現代操作系統(Linux,Unix,Windows,MacOS,Symbian等)上運行的程序中唯一獲得的內存。
這聽起來像你的問題是沒有一個連續的虛擬地址範圍足夠大,你的向量[1]。我懷疑發生了什麼事情,比如你需要一個32位的進程超過1.5GB,這個進程一次只能使用2GB,所以在任何一端都沒有太多的「空間」來填充其他的數據, 「中等」小於1.5GB - 特別是,如果您的矢量正在增長,則需要兩個矢量副本,一個是當前大小,另一個大小是要複製的大小。
一個簡單的解決方案,假設你知道向量需要多大是被設定它的大小,例如vector<int> vec(some_size);
如果你不知道,有一些更多的解決方案:
如果你有一個64位的操作系統,你可以嘗試設置LARGEADDRESSAWARE
標誌的可執行文件(假設它的Windows)。由於64位操作系統不必爲操作系統本身預留大量的內存空間(這超出了32位地址範圍,在32位操作系統中),這應該會給您提供更多的內存空間。時,需要啓動與/ 3GB的OS,並設置上述標誌位。
或編譯的代碼爲64位(升級到一個64位操作系統後,如果需要的話)。
[1]當然,除非你正在編寫一個驅動程序,並試圖分配的物理內存多兆字節的緩衝區用於DMA - 但我認爲你會這麼說
問題無關記憶,甚至與虛擬內存。一個數組需要一個連續的地址範圍速度(通常在Win32程序中爲2 GB)是分散的,因此沒有足夠的可用空間。
如果你可以得到地址,Windows會自動提供虛擬內存與他們一起去。
現在是時候將您的應用程序移動到64位。
- 1. 虛擬內存的使用
- 2. 創建一個虛擬窗口,用於在內存中繪畫
- 3. 虛擬內存
- 4. 虛擬內存?
- 5. Tkinter虛擬窗口崩潰
- 6. 在窗口中獲取最低空閒虛擬內存地址
- 7. 使用端口映射I/O時是否使用虛擬內存?
- 8. 使用批次更改虛擬內存
- 9. 虛擬內存使用率高
- 10. Node.js虛擬內存使用率高
- 11. 如何在「LightBox」之類的「虛擬窗口」中加載內容
- 12. 如何使用TJvBalloonWindow作爲虛擬treeview的提示窗口?
- 13. 爲什麼保留的虛擬內存在當前使用的虛擬內存不增長的同時增長?
- 14. 分配內存之前虛擬內存
- 15. 虛擬內存到物理內存
- 16. 物理內存與虛擬內存
- 17. 虛擬內存或物理內存
- 18. 使用內存映射文件實現虛擬內存
- 19. Excel虛擬內存問題
- 20. 虛擬內存處理
- 21. gdb:虛擬內存耗盡
- 22. 虛擬內存和sbrk
- 23. Linux上的虛擬內存
- 24. Android支持虛擬內存
- 25. mongodb虛擬內存大小
- 26. 需要虛擬內存嗎?
- 27. Memcached和虛擬內存
- 28. 什麼是虛擬內存?
- 29. 訪問linux虛擬內存
- 30. cc1plus:虛擬內存耗盡
重新分配需要多少內存? – Inspired
你知道虛擬內存是什麼嗎? –