malloc
e calloc
ha queste firme:
void* malloc( size_t size );
void* calloc( size_t num, size_t size );
Fanno praticamente la stessa cosa. Entrambi assegna un blocco di memoria della dimensione specificata e restituisce un puntatore a quel blocco. La differenza è che calloc
inizializza l'intera memoria su zeri. In realtà, calloc
potrebbe essere implementato in modo simile a questo:
void* calloc( size_t num, size_t size ) {
void * ptr = malloc(num*size);
if(!ptr) return NULL;
return memset(ptr,0,num*size);
}
(So che ci sono ragioni per non implementarlo in questo modo , ma non è questo l'argomento.)
Dal momento che sono così simili, qual è la ragione delle loro diverse firme? Quando chiami malloc
, specifica il numero di byte che desideri e quando chiami calloc
specifichi una dimensione di blocco e il numero di blocchi. Non preferisco uno rispetto all'altro, ma mi dà fastidio che siano diversi.
Immagina di aver scritto un pezzo di codice con un po 'di malloc
s, e poi ti rendi conto che tutte queste allocazioni devono essere azzerate. Se avessero la stessa firma significherebbe che devi solo cambiare la "m" in una "c".
C'è mai stata una ragione per questa scelta di design, o era solo una coincidenza?