Pergunta

problema Curto:

#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;
}

com 2 GB de RAM (em 32bit OS) Eu não posso fazê-lo funcionar com L_size = 3000 que é bastante óbvio, uma vez que seria necessário aprox. 2.4GB.

Mas quando eu começar 2 cópias do programa acima, cada uma com L_size = 1500 ele funciona - realmente lento, mas finalmente ambos os retornos allocated no console. Então a questão é - como isso é possível? Está relacionado com a memória virtual?

É possível ter uma grande variedade armazenados na memória virtual durante a operação em outro -? Dentro de um programa

Thx.

Foi útil?

Solução

Sim. O sistema operacional lhe permitirá alocar até 2 GB de RAM por processo. Quando você começa duas cópias, ele vai deixar isso crescer usando memória virtual, que será muito, muito lento (uma vez que ele está usando o disco rígido), mas ainda função.

Outras dicas

Sim, é a memória virtual. Com L_size = 1500, você pode começar a primeira instância e vai ser capaz de alocar a memória necessária. Quando você iniciar a segunda instância, a memória alocada pela primeira instância é paginada para o disco, abrindo espaço na RAM para a segunda instância.

A quantidade de RAM você pode alocar a qualquer momento e em qualquer processo de um depende não só da quantidade de RAM física e memória virtual (tamanho do arquivo página) que você tem disponível, mas também sobre a largura de seus endereços de memória. Em uma máquina de 64 bits, você será capaz de alocar muito mais memória em um único processo do que você seria capaz de em uma máquina de 32 bits.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top