Різниця між mmap та malloc

mmap vs malloc

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

Відмінності

По-перше, важливо встановити, чи є якісь докази, які б свідчили про наявність значної задухи пам'яті. Це робиться шляхом вимірювання продуктивності програми проти управління пам'яттю .

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

З іншого боку, 'mmap' - це системний виклик, який бере на себе зарядку і вимагає від ядра знайти невикористану та суміжну область в адресі програми, яка є достатньо великою, щоб дозволити відображення декількох сторінок пам'яті. Існує також створення структур управління віртуальною пам'яттю, що фактично не може призвести до сегментації.

Маллок зазвичай функціонує в більшості процесів управління пам'яттю. Якщо програма потребує додаткової пам'яті, вона запозичена в ОС. Mmap, з іншого боку, використовує контекстний комутатор, який перетворюється в землю ядра.

Malloc найкраще підходить для розподілу пам'яті в будь-якій програмі, що працює в системі, на відміну від використання mmap. Це те, що потрібно зробити за замовчуванням, крім випадків, коли це може бути дозволено.

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

Після вимірювання продуктивності та використання ресурсів слід зробити ретельну оцінку використання даних усіма програмами, що працюють в системі. Якщо можна показати термін служби запущених програм, він може стати кращим.

Використання mmap для розподілу пам’яті має той недолік, що розподіл та розміщення даних у шматках коштує дорого. Це відбувається тому, що дані розбиті на численні області, а також не дозволяють mmap робити системні дзвінки.

Mmap вигідніше порівняно з malloc, оскільки пам'ять, що використовується mmap, негайно повертається в ОС. Пам'ять, яку використовує malloc, ніколи не повертається, якщо не відбувається розрив сегмента даних. Ця пам'ять спеціально зберігається для повторного використання.

Підсумок

'malloc' означає основну точку розподілу пам'яті

Система mmap викликає і запитує ядро, щоб знайти невикористані регіони в адресах додатків, які можуть вмістити відображення декількох сторінок пам'яті

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

Перевага mmap над malloc - це наявність пам'яті, на відміну від пам'яті malloc, яка повторно використовується.