Разница между Mmap и Malloc (с таблицей)

Оглавление:

Anonim

В программировании на C существует динамическая память, которая указывает на выделение памяти в стандартной библиотеке C через набор функций. Malloc - один из них, который используется для выделения памяти. Тогда есть mmap. Это используется как система с отображением памяти, которая имеет свой уникальный ввод и вывод. Эти двое предоставляют одинаковые функции, но более глубокое изучение этой темы обнаруживает некоторые различия.

Mmap против Malloc

Разница между mmap и malloc в том, что время выполнения mmap намного меньше, чем у malloc. Malloc - это основной интерфейс выделения памяти, тогда как mmap - это системный интерфейс. Это отвечает за поиск ядром адресов достаточно большого размера для отображения множества страниц.

Mmap в вычислениях - это многозадачный системный вызов POSIX, который записывает все данные, файлы и устройства в свою память. Этот метод также известен как метод, который относится к файлу с отображением памяти и реализует копирование данных в его физическую память, поскольку содержимое не может быть прочитано напрямую с диска.

Malloc - это сокращенная форма термина «выделение памяти», которая используется для динамического выделения огромного блока данных с учетом указанного размера, и в случае успеха возвращает указатель, который указывает на первый байт выделенной памяти, в противном случае возвращает NULL.. В реальном механизме распределения памяти есть много различных возможностей, которые использует Malloc.

Таблица сравнения Mmap и Malloc

Параметры сравнения

Mmap

Маллок

Определение Mmap относится к системному вызову, который просит ядро ​​найти большой адрес для отображения страниц. Malloc - это основной интерфейс распределения памяти, который объединяет все средства, доступные в системе.
Функция Mmap использует переключатель контекста и превращает его в ядро. Malloc выделяет блок памяти в apile.
Также называется Mmap также известен как системный вызов. Malloc также известен как интерфейс выделения основной памяти.
Результаты Mmap не влияет на производительность других систем. Malloc дезорганизует и снижает производительность системы.
Лучше всего подходит для Mmap лучше всего подходит для ускорения процесса ответов приложений. Malloc лучше всего подходит для выделения памяти в любом приложении в системе.

Что такое Mmap?

Mmap относится к системному вызову Unix, совместимому с POSIX, который отображает данные, файл или устройство в память. Это метод ввода-вывода отображения памяти. В вызывающем процессе создается новое отображение в виртуальном адресном пространстве. По адр. найден начальный адрес нового сопоставления, а длина сопоставления определяется аргументом длины (который должен быть больше 0).

Если addr оказывается равным NULL, то адрес выбирается ядром, которое выполняет сопоставление, что считается самым простым методом создания нового сопоставления. Если адрес не найден как NULL, тогда ядро ​​рассматривает это как указание на размещение сопоставления в каком-либо месте в Linux.

Ядро находит ближайшую границу страницы и пытается сопоставить эту область. Если ядро ​​находит отображение, которое уже существует в области, оно выбирает новый адрес, который может зависеть от индикации, принятой ядром. В результате этого вызова адрес нового сопоставления отправляется обратно. Сразу после возврата вызова дескриптор файла, fd, немедленно закрывает отображение без признания его недействительным.

Что такое Маллок?

Malloc () - это функция выделения памяти, которая выделяет байты размера и отправляет обратно указатель на выделенную память. Память не установлена ​​в исходное положение. Если имя байта размера равно 0, то функция malloc () отправляет либо NULL, либо уникальный указатель значения, который впоследствии может быть успешно передан в free ().

Пространство памяти, на которое указывает ptr, освобождается функцией free (), которая должна была быть отправлена ​​обратно функцией malloc (). В противном случае считается, что поведение undefined происходит, если ранее вызывалась функция free (ptr). Никакая операция не выполняется и не выполняется, если ptr имеет значение NULL. Если обнаружено, что ptr равен NULL, тогда значение вызова равно malloc (size) для каждого значения size; если он эквивалентен 0, и ptr не обнаружен как NULL, тогда значение вызова равно free (ptr).

Только когда ptr равен NULL, он должен был быть отправлен обратно предыдущим вызовом malloc (). И область, на которую указали, была изменена, сделана свободная (ptr). По умолчанию Linux следует оптимистической стратегии распределения памяти, что означает, что если malloc () отправляет обратно ненулевое значение, есть вероятность потери памяти. И если окажется, что системе не хватает памяти, некоторые процессы будут уничтожены убийцей OOM.

Основные различия между Mmap и Malloc

Вывод

В заключение, mmap - это системный вызов, который просит ядро ​​найти пустую область в адресе приложения, которая соответствовала бы отображению различных страниц памяти, в то время как malloc - это точка выделения памяти, которая выделяет блок памяти определенного размера. Память устанавливается на время ее выполнения, что означает, что пока программа не будет выполнена, никакое другое пространство не может быть зарезервировано.

В некоторых случаях mmap имеет преимущество перед malloc, поэтому не рекомендуется выбирать между этими двумя для выделения памяти, поскольку mmap разделяет память, а затем не может выполнить системный вызов.

использованная литература

Разница между Mmap и Malloc (с таблицей)