Разница между mmap и malloc

ММАП против Мэллока

В C имеется динамическая память, и это указывает на выделение памяти в языке программирования C посредством набора функций, присутствующих в стандартной библиотеке C. Одним из них является malloc, который относится к распределению памяти. В системе UNIX есть mmap, которая относится к системе отображения памяти, которая имеет свой собственный уникальный ввод / вывод. Эти два (mmap и malloc) по номиналу будут выполнять одну и ту же функцию, но дальнейшее изучение выявляет некоторые различия. Эти различия, вытекающие из функциональности, описаны ниже..

Различия

Прежде всего, важно установить, есть ли какие-либо доказательства, указывающие на существенное удушение доступной памяти. Это делается путем измерения производительности программы в сравнении с управлением памятью .

Основной интерфейс выделения памяти - это malloc. Это самая большая библиотека в Си. Часть кода управления, содержащегося в нем, является mmap. Когда запущен malloc, он собирает все доступные системные средства. Дополнительные возможности системы могут быть мобилизованы через ядро, которое является одной из стратегий управления памятью, которые используются системами для обеспечения удовлетворительного распределения памяти. Однако этот процесс не является простым и усложнен из-за того, что люди не могут создавать простые программы, которые могут дезорганизовать распределение памяти и, следовательно, снизить производительность..

«mmap», с другой стороны, является системным вызовом, который берет на себя ответственность и просит ядро ​​найти неиспользуемую и непрерывную область в адресе приложения, которая достаточно велика, чтобы можно было отобразить несколько страниц памяти. Существует также создание структур управления виртуальной памятью, которые по сути не могут привести к segfault.

Malloc обычно функционирует в большей части процесса управления памятью. Если программе требуется дополнительная память, она заимствуется у ОС. Mmap, с другой стороны, использует переключатель контекста, который преобразуется в землю ядра.

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

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

После измерения производительности и использования ресурсов следует провести тщательную оценку использования данных всеми приложениями, работающими в системе. Если время жизни запущенных приложений может быть показано, оно может стать лучше.

Использование mmap для выделения памяти имеет недостаток, заключающийся в том, что выделение и освобождение данных в блоках обходятся дорого. Это связано с тем, что данные разбиты на многочисленные области, а также не позволяют mmap выполнять системные вызовы..

Mmap имеет преимущество перед malloc, поскольку память, используемая mmap, немедленно возвращается в ОС. Память, используемая malloc, никогда не возвращается, если не произошел разрыв сегмента данных. Эта память специально хранится для повторного использования.

Резюме

'malloc' обозначает точку выделения основной памяти

Система mmap вызывает и запрашивает ядро, чтобы найти неиспользуемые области в адресах приложения, которые могут приспособить отображение нескольких страниц памяти

Mmap не рекомендуется для выделения памяти, поскольку он разделяет доступную память и не может выполнять системные вызовы

Преимущество mmap перед malloc заключается в доступности памяти, в отличие от памяти malloc, которая используется повторно..