سؤال

ومشكلة قصيرة:

#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 من ذاكرة الوصول العشوائي (على نظام التشغيل 32BIT و) لا يمكن أن تجعل من العمل مع L_size = 3000 الذي هو واضح جدا لأنها سوف تحتاج تقريبا. 2.4GB.

ولكن عندما أبدأ 2 نسخ من البرنامج السابق مع كل L_size = 1500 يعمل - بطيئة حقا ولكن في النهاية كل من عوائد allocated في وحدة التحكم. لذا فإن السؤال هو - كيف يكون ذلك ممكنا؟ هل تتصل الذاكرة الظاهرية؟

ومن الممكن أن يكون واحدا مجموعة كبيرة المخزنة في الذاكرة الظاهرية في حين تعمل على آخر - ضمن برنامج واحد

وتشك.

هل كانت مفيدة؟

المحلول

نعم. فإن نظام التشغيل يسمح لك لتخصيص ما يصل إلى 2GB من ذاكرة الوصول العشوائي لكل عملية. عند بدء تشغيل نسختين، وسوف تتيح هذه ينمو استخدام الذاكرة الظاهرية، والتي ستكون جدا وبطيئة جدا (نظرا لأنه باستخدام القرص الصلب)، ولكن لا تزال تعمل.

نصائح أخرى

نعم، انها الذاكرة الظاهرية. مع L_size = 1500، يمكنك البدء في المقام الأول، وسوف تكون قادرة على تخصيص الذاكرة المطلوبة. عند بدء تشغيل المثيل الثاني، ومقسم إلى صفحات الذاكرة المخصصة من قبل المقام الأول إلى القرص، مما يجعل الغرفة في RAM للالدرجة الثانية.

وكمية RAM يمكنك تخصيص في وقت واحد وعلى أي عملية واحدة لا يتوقف فقط على مقدار الذاكرة RAM الفعلية والذاكرة الظاهرية (صفحة حجم الملف) المتاحة لديك، ولكن أيضا على عرض عناوين الذاكرة الخاصة بك. على جهاز 64 بت، سوف تكون قادرة على تخصيص المزيد من مساحة الذاكرة في عملية واحدة مما كنت سوف تكون قادرة على على جهاز 32 بت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top