Mis vahe on kallokal ja mallokil? Milline neist on eelistatavam mälu eraldamiseks?


Vastus 1:

calloc = malloc + memset () (memset 0)

Malloc

Argumendid

malloc võtab ainult ühe argumendi.

malloc (suurus baitides);

Initsialiseerimine

malloc ei lähtesta mäluala.

Eraldatud mälualal on prügi väärtused.

Calloc

Argumendid

calloc esitab kaks argumenti.

kallokk (elementide arv, elemendi suurus);

Initsialiseerimine

calloc lähtestab mäluala nullini.

Järeldus:

Kasutage kalloki, kui peate dünaamiliselt eraldatud mäluala nullima.

Vastasel juhul kasutage malloci.

Sisu autorid:

Log2Base2 - visualiseeri ennast

Aitäh!


Vastus 2:

Küsimus: Mis vahe on kallokal ja mallokil? Milline neist on eelistatavam mälu eraldamiseks?

Ma vastasin sellele varem Seth D. Fulmeri vastuses küsimusele Mis on malloc ja calloc? kuid põhimõtteliselt on calloc sama mis malloc, kuid initsialiseerib calloc ka iga eraldatud mälu indeksi väärtuseks 0. Päris calloc on C kena omadus, mida puhtalt C ++ koodis ei eksisteeri. Jah, rakenduses C ++ saate kasutada selliseid C funktsioone nagu malloc ja calloc, kuid malloci ekvivalent on uus operaator ja callociga samaväärne pole. Midagi uut pole, mis seab eraldatud üksuste väärtuseks 0 - osalt seetõttu, et C ++-s eeldatakse, et loote objekte, mitte primitiivseid massiive (kuigi saate teha mõlemat) ja poleks eriti mõtet, kui teeksite järgmist:

Punkt * ptrPoint = uus punkt ();

ja objekt, millele ptrPoint punktid on pärast konstrueerimist seatud 0-le. Sellisena on kallok tõeliselt kasulik ainult siis, kui eraldate massiivi primitiivseid elemente (erinevalt struktuuridest). Kui loote teatud tüüpi struktuuri massiivi, peate tõenäoliselt kasutama mallocit ja seadma käsitsi iga massiivi / mäluploki struktuuri sobivatele väärtustele.


Vastus 3:

Küsimus: Mis vahe on kallokal ja mallokil? Milline neist on eelistatavam mälu eraldamiseks?

Ma vastasin sellele varem Seth D. Fulmeri vastuses küsimusele Mis on malloc ja calloc? kuid põhimõtteliselt on calloc sama mis malloc, kuid initsialiseerib calloc ka iga eraldatud mälu indeksi väärtuseks 0. Päris calloc on C kena omadus, mida puhtalt C ++ koodis ei eksisteeri. Jah, rakenduses C ++ saate kasutada selliseid C funktsioone nagu malloc ja calloc, kuid malloci ekvivalent on uus operaator ja callociga samaväärne pole. Midagi uut pole, mis seab eraldatud üksuste väärtuseks 0 - osalt seetõttu, et C ++-s eeldatakse, et loote objekte, mitte primitiivseid massiive (kuigi saate teha mõlemat) ja poleks eriti mõtet, kui teeksite järgmist:

Punkt * ptrPoint = uus punkt ();

ja objekt, millele ptrPoint punktid on pärast konstrueerimist seatud 0-le. Sellisena on kallok tõeliselt kasulik ainult siis, kui eraldate massiivi primitiivseid elemente (erinevalt struktuuridest). Kui loote teatud tüüpi struktuuri massiivi, peate tõenäoliselt kasutama mallocit ja seadma käsitsi iga massiivi / mäluploki struktuuri sobivatele väärtustele.