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

Просто помните, что до тех пор, пока вы не сохраните что-то там, это все равно воображаемо

Другие вопросы по тегам