Каллок менен mallocтун айырмасы

Мазмуну:

Каллок менен mallocтун айырмасы
Каллок менен mallocтун айырмасы

Video: Каллок менен mallocтун айырмасы

Video: Каллок менен mallocтун айырмасы
Video: Уоррен Мак-Каллок (Warren McCulloch) был американским нейрофизиологом и кибернетиком 2024, Ноябрь
Anonim

Негизги айырма – calloc менен malloc

Программалоодо маалыматтарды сактоо зарыл. Маалыматтар эстутумда сакталат. Бул эс орундары өзгөрмөлөр деп аталат. Ар бир өзгөрмөнүн белгилүү бир түрү бар. Алар бүтүн сандар, калкыма, кош, символдор ж.б. болушу мүмкүн. Бир эле типтеги элементтердин белгиленген өлчөмдөгү ырааттуу коллекциясын сактай турган маалымат структуралары да бар. Бул массив. Программист массивдин өлчөмүн жарыялоосу керек. Эгерде программист беш элемент үчүн бүтүн сандардын массивин жарыяласа, жарыяланган өлчөмдөн жогору индекске маани берүү мүмкүн эмес. Эстутум бөлүштүрүү белгиленген жана аны иштетүү убагында өзгөртүү мүмкүн эмес. Башка эс бөлүштүрүү ыкмасы динамикалык эс бөлүштүрүү болуп саналат. Динамикалык эстутумду бөлүштүрүү талап кылынганда көбүрөөк эстутумду бөлүүгө жана керек болгондо бошотууга жардам берет. Баш файлда динамикалык эстутумду бөлүштүрүү үчүн төрт функция бар. calloc жана malloc - бул эки функция. Calloc менен malloc ортосундагы негизги айырма, calloc эстутумду бөлүштүрөт, ошондой эле бөлүнгөн эстутум блокторун нөлгө чейин инициализациялайт, ал эми malloc эстутумду бөлүштүрөт, бирок бөлүнгөн эстутумду нөлгө чейин инициализациялабайт. Calloc ичиндеги мазмунга кирүү нөл берет, бирок malloc таштанды маанисин берет.

Каллок деген эмне?

Эстутумду бөлүштүрүү – бул аткаруучу программалар үчүн эстутум дайындоо процесси. Кээде эс тутумдун көлөмүн өзгөртүү керек болот. Ошондуктан, динамикалык эс бөлүштүрүү колдонулат. Ал көрсөткүчтөрдү колдонуу менен жүзөгө ашырылат. Көрсөткүчтөр башка өзгөрмөнүн дарегин камтыган шилтеме өзгөрмөлөр.

Calloc жана malloc ортосундагы айырма
Calloc жана malloc ортосундагы айырма

01-сүрөт: calloc жана malloc

calloc "туташкан бөлүштүрүү" дегенди билдирет. Ал бирдей өлчөмдөгү эстутумдун бир нече блокторун бөлүп берет. Каллоктун синтаксиси төмөнкүдөй. Бул эки аргумент талап кылынат. Алар блоктордун саны жана ар бир блоктун өлчөмү. Calloc функциясы жараксыз көрсөткүчтү кайтарат, андыктан талап кылынган маалымат түрүнө ылайык кайтарылган көрсөткүч түрү үчүн чыгаруу оператору колдонулат.

voidcalloc(өлчөм_т сан, өлчөм_т);

Төмөнкү жөнөкөй C программасын караңыз.

камтуу

камтуу

int main(){

int ptr=(int) calloc(20, sizeof(int));

if (ptr==NULL){

printf("Эстутум бөлүнгөн эмес");

}

башка{

printf("Эстутум бөлүнгөн");

}

кайтаруу 0;

}

Жогорудагы программага ылайык, 20 элементти кармай турган туташкан эс тутум блогу бөлүнгөн. Ар биринде бүтүн сандын өлчөмү болот. sizeof(int) колдонулат, анткени бүтүн сандын түрү компилятордон компиляторго өзгөрөт.

Эгер эстутумду бөлүштүрүү ийгиликтүү болсо, ал эстутум блогунун негизги дарегин кайтарат. Бул ptr көрсөткүчү азыр ошол эс тутум блогунун негизги дарегин көрсөтүп жатканын билдирет. Бардык бөлүнгөн аймактар нөлгө чейин инициализацияланган. Ал эстутумга бөлүнгөн билдирүүнү басып чыгарат. Эгерде эстутумду бөлүштүрүү ийгиликсиз болсо, ал нөл көрсөткүчтү кайтарат. Демек, ал эстутум бөлүнгөн эмес билдирүүсүн басып чыгарат.

Malloc деген эмне?

Malloc функциясы эстутумда байттардын керектүү көлөмүн бөлүштүрүү үчүн колдонулат. malloc синтаксиси төмөнкүдөй. Өлчөм байт менен талап кылынган эстутумду билдирет.

void malloc(size_t_size);

Malloc функциясы жараксыз көрсөткүчтү кайтарат, ошондуктан талап кылынган маалымат түрүнө ылайык кайтарылган көрсөткүч түрү үчүн чыгаруу оператору колдонулат.

Төмөндө malloc функциясы бар жөнөкөй C программасын караңыз.

камтуу

камтуу

int main(){

int ptr=(int) malloc (10sizeof(int));

if (ptr==NULL){

printf("Эстутум бөлүнгөн эмес");

}

башка{

printf("Эстутум бөлүнгөн");

}

кайтаруу 0;

}

Жогорудагы программага ылайык, эс тутум блогу бөлүнөт. Көрсөткүч бөлүнгөн эс тутумдун баштапкы дарегин көрсөтүп турат. Кайтарылган көрсөткүч бүтүн сан түрүнө айландырылат. Эгерде эстутум бөлүнгөн болсо, ал эстутум бөлүнгөн билдирүүнү басып чыгарат. Эгерде эстутум бөлүнбөсө, нөл көрсөткүч кайтып келет. Демек, эстутум бөлүнгөн эмес билдирүү басып чыгарылат.

Каллок менен mallocтун кандай окшоштуктары бар?

  • Бул эки функция тең башкы файлда жарыяланган. Бул стандарттуу китепкана баш файлы.
  • Эки функция тең динамикалык эстутумду бөлүштүрүү үчүн колдонулат.
  • Calloc жана malloc тарабынан кайтарылган көрсөткүч белгилүү түргө чыгарылышы керек.
  • Эстутум ийгиликтүү бөлүштүрүлгөндө, эки функция тең эстутум блогунун негизги дареги менен көрсөткүчтү кайтарат.
  • Эгер эстутумду бөлүштүрүү ийгиликсиз болсо, нөл көрсөткүч кайтарылат.

Каллок менен mallocтун ортосунда кандай айырма бар?

calloc vs malloc

calloc – бул C тилиндеги stdlib.h баш файлында динамикалык эстутумду бөлүштүрүү функциясы, ал белгилүү бир байт санын бөлүп, аларды нөлгө чейин инициализациялайт. malloc – белгилүү бир байт санын бөлгөн C тилиндеги stdlib.h баш файлында динамикалык эстутумду бөлүштүрүү функциясы.
Мааниси
чалуу туташкан бөлүштүрүү дегенди билдирет. malloc эстутум бөлүштүрүүнү билдирет.
Синтаксис
calloc void calloc (өлчөмү_t_num, size_t өлчөмү); сыяктуу синтаксиске ылайык келет malloc void malloc(size_t_size); синтаксисине окшош.
Аргументтер саны
calloc эки аргумент алат. Алар блоктордун саны жана ар бир блоктун өлчөмү. malloc бир аргумент алат. Бул байттардын саны.
Ылдамдык
calloc malloc караганда бир аз көбүрөөк убакытты алат. Бул бөлүнгөн эстутумду нөлгө инициализациялоонун кошумча кадамы менен байланыштуу. malloc callocка караганда ылдамыраак.

Корытынды – calloc vs malloc

Статикалык эстутумду бөлүштүрүүдө, мисалы, массивдерди колдонуп, эстутум бекитилет. Эгер бир нече элементтер сакталса, эс тутумдун калган бөлүгү текке кетет. Бөлүнгөн эс талап кылынган эстутумдан кичине болгондо да каталарды жаратышы мүмкүн. Ошондуктан, динамикалык эс бөлүштүрүү колдонулат. Си тилинде calloc жана malloc динамикалык эстутумду бөлүштүрүүнү камсыз кылат. Каллок менен mallocтун айырмасы, calloc эстутумду бөлүштүрөт жана ошондой эле бөлүнгөн эстутум блокторун нөлгө чейин инициализациялайт, ал эми malloc эстутумду бөлүштүрөт, бирок эстутум блокторун нөлгө чейин инициализациялабайт. Malloc эки аргумент алат, ал эми calloc эки аргумент алат.

Calloc vs malloc PDF форматын жүктөп алыңыз

Сиз бул макаланын PDF версиясын жүктөп алып, аны оффлайн максаттары үчүн колдонсоңуз болот. Сураныч, PDF версиясын бул жерден жүктөп алыңыз: calloc менен mallocортосундагы айырма

Сунушталууда: