Malloc
Malloc (от. memory allocation — рус. выделение памяти) — функция языка Си, системный вызов и просто хорошая вещь.
Чтоэто[править]
Это функция стандартной библиотеки древнего языка Си, по-сути, делает системный вызов, дабы прога могла получить чуть-чуть памяти, которую может читать/писать, а может и исполнять. Принимает размер выделяемой памяти в байтах, а возвращает указатель на область выделенной памяти, либо NULL, если операционная система по какой-то причине отказалась выделять память. По-хорошему, после каждого выделения памяти нужно проверять выделилась она или всё пошла по пизде, потому что, если попытаться взаимодействовать с NULL, то по пизде пойдёт вся остальная программа. Так же, когда выделенная память вам больше не нужна, то её треба освободить.
free()[править]
Занятые ячейки ОЗУ так и останутся занятыми, пока вы не выключите компьютер пока жив процесс. Поэтому, если выделенная область памяти вам уже ни к чему, то вызывайте функцию free, передав ей указатель на начало блока памяти (если передать ей 0, то вы высвободите всю ОС, так что будьте аккуратнее!).
К слову, не стоит бояться, что, если ваша ОЗУ забита на 100 %, то все проги упадут от недостатка швободной памяти, на деле всё уже было продумано до вас и ОС применит механизм подкачки, т.е избыток данных будет сбрасываться на ваш жоский диск. Естественно скорость доступа к заветным данным упадёт в миллион раз, но зато компутер не взорвётся и у вас будет возможность по-скорее убить процесс, жрущий вашу оперативку.
realloc()[править]
Realloc (reallocation — рус. перераспределение) — функция, которая принимает указатель на, уже выделенный, блок памяти и новый размер блока. Если указанный размер больше текущего, то справа от массива станет доступно больше свободного места; в противном случае, области памяти сделают обрезание до нужной длины. Если указатель на блок памяти равен NULL, то поведение функции станет аналогично malloc’у.
calloc()[править]
Calloc (clear allocation — чистое выделение) — функция, делающая выделение памяти и автоматическое убирание говен из неё. Прикол в том, что при использовании malloc и realloc выделенные ячейки памяти могут иметь любое значение, которое осталось от прошлых программ. Заказалось бы — хуй с ним, а вот хуй вам. Если вы, допустим, решите скопировать туда по-байтово строку и не удосужиться обременить её в конце нуль-терминатором, то обыкновенная попытка вывода этой строки может закончиться плачевно, так как может произойти выход за разрешенный диапазон и последующая кара от ОС.
Именно чтобы бедным анонам не приходилось после каждого выделения памяти ещё и вручную заполнять её нулями, древними сверхразумами был создан calloc, он принимает в себя количество ячеек памяти, которые надо выделить и размер одной ячейки. Тобеш, вызов calloc(10, 2) приведёт к вероятно успешному выделению 20 живительных байтиков памяти, заполненных нулями.