цаллоц вс. маллоц

Када цаллоц користи се за доделу блока меморије, додељена регија се иницијализира на нула. У супротности, маллоц не додирује садржај додељеног блока меморије, што значи да садржи вредности смећа. То може потенцијално бити безбедносни ризик, јер је садржај меморије непредвидив, а грешке у програмирању могу резултирати цурењем тих садржаја.

Упоредни графикон

Разлике - Сличности - цаллоц насупрот маллоц упоредном графикону
цаллоцмаллоц
Функција додељује област меморије довољно велика да држи „н елементе“ величине „величине“. Такође инициализира садржај меморије на нуле. додељује "величину" бајтова меморије.
Број аргумената 2 1
Синтакса воид * цаллоц (број_оф_блокова, величина_оф_еацх_блоцк_ин_бајта); воид * маллоц (сизе_ин_битес);
Садржај додељене меморије Додељени регион се иницијализира на нулу. Садржај додељене меморије се не мења. тј. меморија садржи непредвидиве или смеће вриједности. Ово представља ризик.
Повратна вредност воид поинтер (воид *). Ако додељивање успе, враћа се показивач на блок меморије. Ако додељивање меморије не успе, враћа се показивач НУЛЛ. воид поинтер (воид *). Ако додељивање успе, враћа се показивач на блок меморије. Ако додељивање меморије не успе, враћа се показивач НУЛЛ.

Садржај: цаллоц вс. маллоц

  • 1 Синтакса и примери
    • 1,1 маллоц ()
    • 1,2 цаллоц ()
  • 2 Видео Објашњење Цаллоц, Маллоц и Реаллоц
  • 3 Безбедносна разматрања
  • 4 Брзина извршења
  • 5 Референце

Синтакса и примери

маллоц ()

воид * маллоц (сизе_т сизе); 

издваја величина бајтова меморије. Ако додељивање успе, враћа се показивач на додељену меморију. Иначе НУЛА је враћен. Пример:

/ * Додијелите меморију за низ са 15 елемената типа инт. * / инт * птр = маллоц (15 * сизеоф (инт)); ако (птр == НУЛЛ) / * Меморија се не може доделити, па испишите грешку и изађите. * / фпринтф (стдерр, "Не могу доделити меморију \ н"); излаз (ЕКСИТ_ФАИЛУРЕ);  / * Додјела је успјела. * / 

Напоменути да маллоц захтева да израчунамо бајте потребне меморије и проследимо то као аргумент маллоцу.

цаллоц ()

воид * цаллоц (величина_т нелементс, величина_т бајтова); 

додељује непрекидни блок меморије који је довољно велик да држи нелементс величине бајтова сваки. Додељени регион се иницијализира на нулу. У горњем примеру:

/ * Додијелите простор за низ с 15 елемената типа инт и иницијализовати до нуле. * / инт * птр = цаллоц (15, величина (инт)); ако (птр == НУЛЛ) / * Меморија се не може доделити, па испишите грешку и изађите. * / фпринтф (стдерр, "Не могу доделити меморију \ н"); излаз (ЕКСИТ_ФАИЛУРЕ);  / * Додјела је успјела. * / 

цаллоц (м, н) је исто што и

п = маллоц (м * н); иф (п) мемсет (п, 0, м * н); 

Видео Објашњење Цаллоц, Маллоц и Реаллоц

Овај видео водич објашњава функције расподјеле меморије маллоц, цаллоц и реаллоц, као и функцију раздвајања меморије бесплатно:

Безбедносна разматрања

Генерално је добра идеја да се користи цаллоц преко маллоц. Када користите маллоц, садржај додељене меморије је непредвидив. Грешке у програмирању могу узроковати да ови меморијски садржаји пропуштају ненамјерно, али веома рањиви. Добар пример таквог пропуштања је Хеартблеед рањивост у ОпенССЛ-у, чији је основни механизам објашњен у овом КСКЦД стрипу, а још неколико техничких детаља је у овом посту на блогу.

Брзина извршења

цаллоц је мало спорији од маллока због додатног корака иницијализације додељене меморијске регије. Међутим, у пракси је разлика у брзини врло мала и може се занемарити.

Референце

  • цаллоц ман страница
  • маллоц ман страница