c++ - C++中的大型动态数组

标签 c++ memory dynamic overflow

小问题:

#include <iostream>

using namespace std;

int main()
{
    double **T;
    long int L_size;
    long int R_size = 100000;
    long int i,j;

    cout << "enter L_size:";
    cin >> L_size;
    cin.clear();
    cin.ignore(100,'\n');
    cout << L_size*R_size << endl;
    cout << sizeof(double)*L_size*R_size << endl;

    T = new double *[L_size];
    for (i=0;i<L_size;i++)
    {
        T[i] = new double[R_size];
    }

    cout << "press enter to fill array" << endl;
    getchar();
    for (i=0;i<L_size;i++)
    {
        for (j=0;j<R_size;j++)
        {
            T[i][j] = 10.0;
        }
    }
    cout << "allocated" << endl;


    for (i=0;i<L_size;i++)
    {
        delete[] T[i];
    }
    delete [] T;
    cout << "press enter to close" << endl;
    getchar();
    return 0;
}

使用 2GB RAM(在 32 位操作系统上)我无法使用 L_size = 3000 这很明显,因为它需要大约。 2.4GB。

但是当我启动上述程序的 2 个拷贝时,每个拷贝都使用 L_size = 1500 它工作 - 非常慢但最终都在控制台中返回 allocated 。 所以问题是——这怎么可能?跟虚拟内存有关系吗?

有可能在一个程序中将一个大数组存储在虚拟内存中同时对另一个数组进行操作吗?

谢谢。

最佳答案

是的。操作系统将允许您为每个进程分配最多 2GB 的 RAM。当您启动两个拷贝时,它会使用虚拟内存让它增长,这将非常非常慢(因为它使用硬盘驱动器),但仍然可以运行。

关于c++ - C++中的大型动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1650942/

相关文章:

c++ - 在 cpp 中声明为静态的动态增长 vector

java - 类区和堆的区别

c++ - 为什么在尝试分配 4D 数组时会出现段错误(核心已转储)?

javascript - jQuery 动态输入字段

c++ - 了解 C++11 内存栅栏

c++ - 为什么我们需要创建一个单参数构造函数才能使用临时无名对象?

c++ - for 循环 - 遍历特定元素

android - 在linux或android中获取文件/照片的物理内存地址

memory - GCC 对读/写指令的重新排序

C 数组错误 - 要求我声明同一个变量两次