【问题标题】:Allocate Virtual memory before running out of RAM在 RAM 用完之前分配虚拟内存
【发布时间】:2011-04-29 06:14:46
【问题描述】:

是否有可能在 C/C++ 程序中为特定数组分配虚拟内存(交换空间),以便程序继续为其余变量使用 RAM,并可能在某些类型的问题中获得一些好处??

【问题讨论】:

  • 您具体担心什么?通常,操作系统和默认分配器处理事情(包括大事情:)就好了。
  • 我有一个程序可以处理二叉树,非常大的树并生成格式化为字符串(符号数学)的数学表达式,这些表达式添加到一个大数组中,但是在添加过程中,我需要适合它们在正确的位置,就像它是一个矩阵。

标签: c++ c memory virtual allocation


【解决方案1】:

第一部分:在几乎每一个现代操作系统中,都有一种将文件映射到内存位置的方法。您可以这样做并将该文件用作您描述的“交换空间”。 POSIX 标准定义了mmap(可通过 Linux 和 Mac OS 使用),Windows 定义了MapViewOfFile

对于第二部分:这在很大程度上取决于您遇到的问题类型。很可能它只会使对您的阵列的访问变慢(如“非常慢”)并且无济于事,除非它是一个巨大的阵列并且您正在寻找一种通过将内容转移到硬盘驱动器来节省内存的方法。通常,您的操作系统会自行分配交换空间并在其认为合适的情况下对其进行处理,因此明确使用文件作为额外内存对我来说似乎不是一个好的解决方案。

【讨论】:

  • +1 -- 虽然您在 Windows 上寻找的电话是 MapViewOfFile
  • 谢谢,那么自动操作系统交换应该可以满足人们的需求,我只是好奇是否有更好的解决方法
【解决方案2】:

您应该允许操作系统来处理它。如果您决定在磁盘本身上“分配”空间,则对阵列的访问将非常缓慢,并且考虑到阵列可能非常大,对它的操作将需要很长时间。所有当前的操作系统都应该支持在它认为合适时自动将您的程序内存放置到交换或页面文件上。如果您对性能下降不感兴趣,您可以在“内存”中创建自己的数组,但我建议您不要这样做,因为如果您的程序在运行时发生了某些事情,那么这可能不会被清理并可能导致进一步的问题。

【讨论】:

  • 好的,很清楚,我认为我只使用操作系统处理的交换。如果它智能地处理它,那么我不会得到比这更好的解决方案
  • 如果一次有很多内存,您可能会遇到硬故障问题,导致程序运行缓慢,因为它的大部分内存都在页面/交换中,请尽量保持干净尽可能避免这导致大的性能问题,具体取决于您想要做什么
猜你喜欢
  • 2011-03-08
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2020-07-09
  • 2020-09-01
  • 1970-01-01
相关资源
最近更新 更多