我正在调试一个崩溃的程序,因为没有连续的内存可以用于我的向量,需要重新分配。所以我有一个问题,如何不使用虚拟内存?虚拟内存可以用哪种方式使用?谢谢。何时会使用虚拟内存(窗口)?
回答
虚拟内存由操作系统自动使用。你不需要关心这一点。
就你而言,很可能你运行的是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
你知道虚拟内存是什么吗? –