Пре него што схватимо функције маллоц () и цаллоц () прво ћемо разумети значење динамичке доделе меморије. Додела меморије је процедура додељивања меморије рачунара за извршавање програма и процеса. Ми користимо технике динамичке алокације када није познато пре колико је меморијског простора потребно за програм и процес.
Динамичка додела меморије настаје због проблема повезаних са додељивањем статичке меморије, као што је, ако је меморисано мање елемената, онда се остатак меморије непотребно губи. Стога, он превазилази проблеме алокације статичке меморије где се меморија додељује само када је то потребно.
Цомпарисон Цхарт
Основа за поређење | маллоц () | цаллоц () |
---|---|---|
Нема блокова | Додељује један блок тражене меморије. | Додељује више блокова тражене меморије. |
Синтакса | воид * маллоц (сизе_т сизе); | воид * цаллоц (сизе_т нум, сизе_т сизе); |
Инитиализатион | маллоц () не брише и не иницијализује додељену меморију. | Додељена меморија се иницијализује на нулу помоћу цаллоц (). |
Начин расподеле | Функција маллоц () додељује меморију величине 'сизе' из хеап-а. | цаллоц () функција додељује меморију чија је величина једнака нум * величини. |
Брзина | Брзо | Цомпаративели слов. |
Дефиниција маллоц ()
Функција маллоц додељује блок меморије у бајтовима . Корисник би требао експлицитно навести величину блока, што је потребно за употребу.
Кроз маллоц функцију програм захтева РАМ система за алокацију меморије, ако је захтев прихваћен (тј., Функција маллоц-а каже да је успешно додељена меморија), враћа показивач на први блок меморије. Она враћа воид тип показивача, што значи да се може додијелити било који тип показивача.
Иако враћа НУЛЛ, ако функције маллоц нису у могућности да доделе потребну количину меморије. Функција маллоц је доступна у ТУРБО Ц, заглавље филе alloc.h
или stdlib.h
, а на УНИКС-у ће бити доступна у заглављу. .
СИНТАКС
Синтакса ове функције је следећа:
malloc(number of elements * size of each element);
на пример, int *ptr;
ptr=malloc(10*sizeof (int))
Где величина представља величину меморије која је потребна у бајтовима (тј. Број суседних меморијских локација које треба доделити).
Али, као што је раније поменуто, функција маллоц враћа воид поинтер, па је цаст оператор потребан за промену типа враћеног показивача на основу наше потребе, горе наведена декларација може бити представљена у следећем облику:
ptr_var=(type_cast* ) malloc (size)
Где је ptr_var
име показивача који задржава почетну адресу додељеног меморијског блока, type_cast
је тип података у који треба да се трансформише враћени показивач (или тип воид), а величина описује величину додељеног меморијског блока у бајтовима .
На пример: int *ptr;
ptr=(int*) malloc (10 * size of (int));
Меморија додељена маллоц функцијом садржи смеће .
Обратите пажњу на то да проверите да ли је одговарајући захтев генерисан од стране маллоц-а да додели меморију коју додељује системски РАМ, или је одбијена (у случају да захтевани простор није доступан). Можемо искористити својство у којем није додељена потребна количина меморије, а функција маллоц враћа НУЛЛ.
Дефиниција цаллоц ()
Функција цаллоц функционише на исти начин као и функција маллоц, искључујући чињеницу да захтева два аргумента као у случају маллоц () само један аргумент.
На пример: int*ptr;
ptr = (int*)calloc(10, 2);
Овде 2 специфицира величину типа података у бајту за који желимо да се изврши додела, што је у овом случају 2 за целих бројева. А 10 означава број елемената за које треба доделити.
Запамтите да је аргумент прослеђен функцији маллоц био (н * 10), то је један аргумент не треба збунити јер је више аргумената увијек одвојено зарезима. Аргумент (н * 10) нема зареза између. Стога је то један аргумент, иако не једноставан, већ израз.
Враћајући се на горе наведену декларацију, након извршења горње изјаве, блоку меморије од 20 бајта додељује се захтевном програму и адреса првог блока се додељује захтевном програму, а адреса првог блока се додељује показивачу птр.
Меморија додељена функцијом цаллоц држи све нуле. Функција цаллоц је такође доступна у заглављу или
ин ТУРБО Ц.
Кључне разлике између маллоц и цаллоц
Примарне разлике између маллоц и цаллоц функција су:
- Један блок тражене меморије је додељен у маллоц-у, док је више блокова тражене меморије додељено цаллоц-ом.
- Функција маллоц не брише и иницијализује додељену меморију. Садржи смеће и ставку додељене меморије није могуће мењати. Насупрот томе, цаллоц иницијализује додељену меморију на нулу.
- маллоц је бржи од цаллоц због захтјева додатних корака иницијализације у цаллоц-у, али разлика је занемарива.
- Друга разлика између ова два је то што је цаллоц маллоц + мемсет, мемсет алоцира физичке странице у меморији, док маллоц само додељује меморију из хрпе у виртуелној адреси.
Закључак:
И маллоц и цаллоц функције се користе за алокацију меморије и имају одређену предност, а недостатак као маллоц је брз у односу на цаллоц. Штавише, маллоц је лакше користити јер узима само један аргумент јер цаллоц додјељује меморију и иницира подручје меморије са ЗЕРО. Али бисте радије користили цаллоц када је варијабла иницијализација важнија за вас.