C++ 在RAM耗尽之前分配虚拟内存

C++ 在RAM耗尽之前分配虚拟内存,c++,c,memory,virtual,allocation,C++,C,Memory,Virtual,Allocation,在C/C++程序中,是否可能为特定数组分配虚拟内存(交换空间),以便程序继续使用RAM处理其余变量,并可能在某些类型的问题上获得一些好处???第一部分:在几乎所有现代操作系统中,都有一种将文件映射到内存位置的方法。您可以这样做,并使用该文件作为您描述的“交换空间”。POSIX标准定义了(可通过Linux和Mac OS使用)和Windows 第二部分:这在很大程度上取决于你遇到的问题类型。很可能它只会使对阵列的访问变慢(如“慢得离谱”),而没有任何帮助,除非它是一个巨大的阵列,并且您正在寻找一种通

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

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


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

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

您具体担心什么?通常,操作系统和默认分配器处理的事情(包括大的事情:)很好。我有一个程序,可以处理二叉树,非常大的树,并生成格式化为字符串(符号数学)的数学表达式,这些表达式添加到一个大数组中,但是在添加过程中,我需要将它们放在正确的位置,就像它是一个矩阵一样。+1--虽然你在Windows上寻找的调用是
MapViewOfFile
。谢谢,那么自动操作系统交换应该能够满足人们的需要,我只是好奇是否有更好的解决方法,非常清楚,我想我会使用操作系统处理的交换。如果它能智能地处理,那么我就不会找到比这更好的解决方案。如果一次内存太多,您可能会遇到硬故障问题,导致程序运行缓慢,因为它的大部分内存都在页/交换中,只要试着保持它尽可能干净,就可以避免这会根据您想要做的事情而导致大的性能问题