Mmap и malloc

Anonim

mmap vs malloc

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

Различия

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

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

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

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

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

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

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

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

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

Резюме

«Malloc» обозначает основную точку выделения памяти

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

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

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