Память в диспетчере задач
Вот код, в котором выделяется массив на 6 миллиардов байт - это чуть больше 5.5 GB:
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
int main()
{
puts("Started");
long long n = 6'000'000'000;
auto *a = new char[n];
puts("Created");
for (long long q = 0; q < n; q += 100)
a[q] = q / 100;
puts("Written");
for (long long i; scanf("%lld", &i), i >= 0; )
printf("a[%lld] = %d = %d\n", i, a[i], (char)(i/100));
getchar();
delete[] a;
}
Программа скомпилирована под x64 и работает верно:
Started
Created
Written
0
a[0] = 0 = 0
100
a[100] = 1 = 1
1000
a[1000] = 10 = 10
1000000
a[1000000] = 16 = 16
1000000000
a[1000000000] = -128 = -128
2000000000
a[2000000000] = 0 = 0
2000000100
a[2000000100] = 1 = 1
4000000100
a[4000000100] = 1 = 1
5000000100
a[5000000100] = -127 = -127
5999999900
a[5999999900] = -1 = -1
Visual Studio 2017 показывает потребление памяти 6 GB:
Но в диспетчере задач видно совершенно другое:
Пиковый рабочий набор (память) 4 769 092 К
Память (активный частный рабочий набор) 2 480 568 К
Память (частный рабочий набор) 2 480 568 К
Память (общий рабочий набор) 292 К
Или даже так:
Рабочий набор (память) 2 396 008 К
Пиковый рабочий набор (память) 2 507 724 К
Память (активный частный рабочий набор) 2 395 780 К
Память (частный рабочий набор) 2 395 780 К
Память (общий рабочий набор) 228 К
Что значат эти числа (каждая из 5 колонок) и можно ли в диспетчере задач увидеть те 6 GB, которые потребляет программа?


