Интересный вопрос, что будет происходит внутри системы, при таком выделении ?
Сколько реально можно выделить, что произойдет с системой ?
Ответ:
Пример, есть у нас такой код:
После его исполнения, у вас начнется жесткое шуршание диска, все начнет дико тормозить, в общем компьютеру будет очень плохо.
Ну а все-таки, что-же будет дальше...
А дальше вот-что (Пример запускал на линуксе):
Параметр VIRT (Виртуальная память) показывает 621 Гигабайт, а-а-а, от куда столько ? Ведь реально памяти всего 4 Гигабайта ?


Все очень просто, реально выделяется виртуальная память:
Операционные системы используют виртуальную память, чтобы создать иллюзию для пользователей очень большой памяти. Поэтому при нехватке оперативной памяти, ОС помещает новую выделенную память на жесткий диск.
Но все-таки, от куда 621 Гигабайт, если свап у нас всего 711 мегабайт ?
Как это работает, в рамках данного примера:
Сначала создаются наши новые выделенные страницы памяти, непосредственно в оперативной памяти, пока есть достаточно места. В какой-то момент у нас будет мало места в оперативной памяти, поэтому последние недавно использованные страницы (алгоритм LRU) будут перемещены в swap, расположенный на жестком диске, чтобы иметь возможность записать новые выделенные страницы в оперативную память.
Наша выделенная виртуальная память теперь больше оперативной памяти.
Из-за этого получается две проблемы:
• Во-первых, наша программа очень быстро создает страницы, скорость в адресном пространстве виртуальной памяти.
• Во-вторых, запись чего-либо на жесткий диск чрезвычайно медленно по сравнению с записью в ОЗУ.
Новые страницы для записи на диск помещаются в асинхронную в очередь и ожидают когда-же диск их запишет.)
Вот схема работы:
Через несколько секунд так много страниц для перемещения на диск, что операционная система будет зависать в ожидании их записи.
В итоге и получается мы создали кучу страниц памяти (В адресном пространстве виртуальной памяти), но записать их не успели.
Это создает отказ в обслуживании !
Сколько реально можно выделить, что произойдет с системой ?
Ответ:
Пример, есть у нас такой код:
C:
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char const *argv[]) {
printf("=============== Infinite memory allocator - v1.0.1 ===============\n");
long long int k = 0;
while (1) {
// Creates the zone in memory
char * mem = malloc(1000000);
k += 1;
// Use the zone to prevent bypass by optimization
mem[0] = '\0';
printf("\r[LOG] Allocated %lld", k);
}
return 0;
}
После его исполнения, у вас начнется жесткое шуршание диска, все начнет дико тормозить, в общем компьютеру будет очень плохо.

Ну а все-таки, что-же будет дальше...
А дальше вот-что (Пример запускал на линуксе):
Параметр VIRT (Виртуальная память) показывает 621 Гигабайт, а-а-а, от куда столько ? Ведь реально памяти всего 4 Гигабайта ?



Все очень просто, реально выделяется виртуальная память:
Операционные системы используют виртуальную память, чтобы создать иллюзию для пользователей очень большой памяти. Поэтому при нехватке оперативной памяти, ОС помещает новую выделенную память на жесткий диск.
Но все-таки, от куда 621 Гигабайт, если свап у нас всего 711 мегабайт ?

Как это работает, в рамках данного примера:
Сначала создаются наши новые выделенные страницы памяти, непосредственно в оперативной памяти, пока есть достаточно места. В какой-то момент у нас будет мало места в оперативной памяти, поэтому последние недавно использованные страницы (алгоритм LRU) будут перемещены в swap, расположенный на жестком диске, чтобы иметь возможность записать новые выделенные страницы в оперативную память.
Наша выделенная виртуальная память теперь больше оперативной памяти.
Из-за этого получается две проблемы:
• Во-первых, наша программа очень быстро создает страницы, скорость в адресном пространстве виртуальной памяти.
• Во-вторых, запись чего-либо на жесткий диск чрезвычайно медленно по сравнению с записью в ОЗУ.
Новые страницы для записи на диск помещаются в асинхронную в очередь и ожидают когда-же диск их запишет.)
Вот схема работы:
Через несколько секунд так много страниц для перемещения на диск, что операционная система будет зависать в ожидании их записи.
В итоге и получается мы создали кучу страниц памяти (В адресном пространстве виртуальной памяти), но записать их не успели.

Это создает отказ в обслуживании !