numa_alloc_onnode() выделяет память больше, чем может?
Я попытался использовать numa_alloc_onnode() для выделения 40 ГБ памяти на узле 32 ГБ, выполнив приведенный ниже код. Однако он не сообщает об ошибках.
a = (int *) numa_alloc_local (sizeof(int) * GB_8 * 5);
if (a == NULL)
printf("a error\n");
for ( i = 0; i <GB_8*5; i++ )
a[i] = (int)i;
printf("a done\n");
Может кто-нибудь, пожалуйста, помогите объяснить?
1 ответ
Пока вы на самом деле не пытаетесь СОХРАНИТЬ что-то в этой памяти, это просто пар, воображаемое... даже виртуальное!
Система скажет, конечно! Вы можете иметь столько на свое имя... но все это просто "на бумаге", пока вы не используете его.
Если бы вы попытались сохранить что-то во всех этих 40+ ГБ памяти, вы, скорее всего, столкнулись бы с ошибками... зависит от размера вашего пространства подкачки в этой точке.
Первые три хита Google для overcommit
:
https://www.kernel.org/doc/Documentation/vm/overcommit-accounting http://www.win.tue.nl/~aeb/linux/lk/lk-9.html http://searchservervirtualization.techtarget.com/definition/memory-overcommit
Просто помните, что до тех пор, пока вы не сохраните что-то там, это все равно воображаемо