Сколько памяти вы можете аллоцировать?



Пару месяцев назад мы обсуждали, что будет, если маллокнуть 100 Гб памяти. Идея эксперимента мне понравилась, поэтому решил сделать что-то похожее. На этот раз я попробую в цикле на каждой итерации выделять по одному гигабайту памяти.



На этом месте я предлагаю вам задуматься, на какой итерации остановится цикл? Ну то есть, сколько всего памяти с смогу выделить таким образом?



Для конкретики определимся, что у меня на машине 64-битная Ubuntu c 21111872 кбайт оперативной памяти или ~21 Гб. И выделяю я, просто вызывая маллок, ничего больше. Память я также не освобождаю (ждал бы завершения эксперимента уже в гробу😵).



Тут есть несколько вариантов:



1️⃣ Система нам выделить 21 Гб и скажет гуляй хлопец дальше без меня.



2️⃣ У операционной системы есть какой-то внутренний лимит, больше или меньше реального количества доступной памяти, который зависит от количества доступной RAM, и при достижении вот этого лимита ОС откажется выдавать больше памяти.



3️⃣ Мы каким-то образом сможем использовать тот факт, что процессы оперируют с виртуальной памятью, которая по размерам намного больше доступной, и сможем выделить больше памяти, чем есть на самом деле.



В целом, все варианты имеют место быть. Но давайте перейдем уже к результатам. Они на картинке под постом.



Система смогла выделить 131 террабайт памяти для нас. 131 ТЕРРАБАЙТ, КАРЛ. Вы в шоке? Я в шоке. Все в шоке.



Это примерно в 2^12 раза больше, чем доступно на машине. Кто офигел - ставим лайкосик.



What the fuck is going on и откуда такие цифры взялись, разберем в следующих постах.



Stay in touch. Stay cool.



#fun #memory #hardcore