05/09/18 18:16
comtel
Buonasera ragazzi,
semplicemente vorrei sapere se esiste una scelta migliore e una peggiore di fronte all'utilizzare o la malloc o la calloc. Secondo il vostro parere personale e professionale, quale delle due funzioni di buffer manipulation è migliore e in quali casi.
aaa
05/09/18 18:44
pierotofy
calloc inizializza il blocco di memoria a zero.
malloc non inizializza il blocco di memoria.
Dipende dallo scopo. malloc e' probabilmente leggermente piu' veloce, ma devi stare attento ad inizializzare la memoria correttamente. calloc fa il lavoro per te, ma e' probabilmente un pochino piu' lento.
06/09/18 8:52
Mikelius
Tieni presente che la differenza di prestazioni è spesso insignificante.
Credo che potrebbe essere influente nell'ordine delle centinaia di migliaia di elementi da allocare.
Io consiglierei calloc, ma solamente per sicurezza. Ti potresti trovare nel caso in cui malloc nel tuo pc funzioni perchè hai la fortuna che il blocco contenga (via random) un indirizzo valido, mentre su altri pc no, causando crash del programma. E' sempre bene inizzializzare le variabili, si eviteranno problermi difficili da risolvere a chi non ha molta esperienza
aaa
06/09/18 11:39
nessuno
Come detto la calloc è una malloc seguita da una inizializzazione. Se ti serve usi la calloc altrimenti no.
Per il resto la questione degli errori sugli indirizzi non ha alcun senso. Usa la malloc tranquillamente, se hai errori è colpa del resto del codice.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
06/09/18 21:17
TheDarkJuster
Una piccola osservazione: calloc in teoria può allocare più elementi in una volta sola.
Questo dipende dall'implementazione ovviamente, ma se ci pensi bene facendo
sizeof(int) * x e calloc(sizeof(int), x) potresti ottenere due risultati diversi per un x molto grande: infatti la moltiplicazione può andare in overflow, mentre una implementazione di malloc con un for permette di evitare quel tipo di overflow.
Ovviamente dipende dalla specifica implementazione di calloc quindi non puoi farci affidamento (e comunque dubito avrai necessità di allocare un numero di byte abbastanza elevato da provocare un overflow)
aaa