mmap vs malloc
В C има динамична памет и това насочва към разпределение на паметта в езика на програмиране на С чрез набор от функции, присъстващи в стандартната библиотека на C. Едно от тях е malloc, което се отнася до разпределението на паметта. В системата UNIX има mmap, който се отнася до карта, запаметена в памет, която се предлага със свой уникален I / O. Тези два (mmap и malloc) по номинална стойност ще изпълняват една и съща функция, но по-нататъшният контрол разкрива някои разлики. Тези разлики, които произтичат от функционалността, са изложени по-долу.
Различията
Първо, важно е да се установи дали има някакви доказателства, показващи наличието на значително задушаване на паметта. Това става чрез измерване на ефективността на програмата спрямо управлението на паметта .
Основният интерфейс за разпределение на паметта е malloc. Това е най-голямата в библиотеката на С. Част от съдържащия се в него код за управление е mmap. Когато malloc работи, той събира всички налични системни съоръжения. Допълнителните системни съоръжения могат да бъдат мобилизирани чрез ядрото, което е една от стратегиите за управление на паметта, която системите използват, за да осигурят задоволително разпределение на паметта. Процесът обаче не е лек и е усложнен поради единствената причина да се попречи на хората да създават прости програми, които могат да неорганизират разпределението на паметта и по този начин да създадат лоша производителност.
'mmap' от друга страна е системно обаждане, което се зарежда и изисква ядрото да намери неизползван и съседен регион в адреса на приложението, който е достатъчно голям, за да позволи картографирането на няколко страници памет. Създава се и структура за управление на виртуална памет, която в действителност не може да доведе до сегмент по подразбиране.
Malloc обикновено функционира в по-голямата част от процеса на управление на паметта. В случай, че програмата изисква допълнителна памет, това се заимства от ОС. Mmap от друга страна използва контекстна превключвател, която се преобразува в земя на ядрото.
Malloc е най-подходящ за разпределяне на памет във всяко приложение, работещо в системата, за разлика от използването на mmap. Това се изисква по подразбиране, освен в специални случаи, когато може да бъде разрешено.
Mmap може да се използва за ускоряване на отговора, даден от приложенията. Това обаче не е препоръчително, тъй като в крайна сметка се жертват някои байтове на страниците, за да може приложението да работи безпроблемно. Въпреки че съдържанието на данни може да изглежда малко в началото, екстраполирането му, когато много приложения искат да стартират, на практика може да забави системата още повече.
След измерване на производителността и използването на ресурси, трябва да се направи задълбочена оценка на използването на данни от всички приложения, работещи в системата. Ако продължителността на работа на приложенията може да бъде показана, тя може да стане по-добра.
Използването на mmap за разпределяне на паметта идва с недостатъка, че разпределението и разместването на данни в парчета е скъпо. Това е така, защото данните са разделени на много области, а също така отказват mmap да извършва системни обаждания.
Mmap е предимство пред malloc, тъй като паметта, използвана от mmap, незабавно се връща в ОС. Паметта, използвана от malloc, никога не се връща, освен ако няма прекъсване на сегмента от данни. Тази памет се съхранява специално, за да се използва повторно.
резюме
'malloc' означава главна точка за разпределение на паметта
Система mmap се обажда и изисква ядрото да намери неизползвани региони в адресите на приложението, което може да побере картографиране на няколко страници памет
Mmap не се препоръчва за разпределяне на памет, тъй като разделя наличната памет и не може да извършва системни повиквания
Предимство на mmap над malloc е наличието на памет, за разлика от malloc паметта, която се използва повторно.