Выделенная память видна в диспетчере задач - PullRequest
1 голос
/ 12 апреля 2020

Я хочу выделить 1 ГБ памяти. Предполагая, что int занимает 4 байта, чтобы выделить 1 ГБ, мне нужен массив из 250000000 элементов:

int main() { 
    string s;

    cout << "Program paused" << flush;
    getline(cin, s);
    int * p = new int[250000000]{};
    cout << "Program paused" << flush;
    getline(cin, s);
    delete [] p;
    cout << "Program paused" << flush;
    getline(cin, s);
}

Windows Диспетчер задач показывает, что моя программа использует 954 МБ. Почему он меньше 1 ГБ?

РЕДАКТИРОВАТЬ: Диспетчер задач также показывает, что ОС зарезервировала 979 100 МБ виртуальной памяти для процесса, который по-прежнему меньше 1 ГБ.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

1 ГБ составляет 1024x1024x1024 байта (по соглашению)

Таким образом, 250000000 x 4 меньше 1 ГБ.

Итак, вы используете (250000000 x 4) / (1024x1024) МБ, что составляет около 953 МБ

1 голос
/ 12 апреля 2020

250,000,000 bytes * 4 - это , а не 1 ГБ. Помните, что гигабайт (точнее , гибибайт ) - это 1024 мегабайта (мегибайта), а каждый мегибайт - 1024 килобайта (кибибайта), что составляет 1024 байта.

Чтобы выделить 1 ГиБ (при условии sizeof(int) == 4) вы хотите:

const size_t len = ( 1024 * 1024 * 1024 ) / sizeof(int); // 268,435,456 
int* p = new int[ len ]{};
...