Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
Dopo anni di attesa e una lunga fase di sviluppo, Noctua entra nel mercato dei dissipatori a liquido AIO con la nuova serie NL-LC1. Forte dell'esperienza maturata nel raffreddamento ad aria, l'azienda austriaca promette di portare la propria filosofia fatta di qualità costruttiva, attenzione ai dettagli e silenziosità anche in questo segmento. Abbiamo provato il nuovo sistema per scoprire se riesce a distinguersi in un mercato ormai molto competitivo.
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Arrivato sul mercato italiano a fine marzo, la serie Boox Go 10.3 (Gen II) offre Android 15, penna da 4096 livelli e retroilluminazione opzionale (nel modello da noi provato, Lumi, presente). La serie si compone di due tablet ePaper che fanno da e-reader, blocco note digitale e persino browser, tutto a un prezzo che fa dimenticare i prodotti di brand più blasonati
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-07-2006, 11:13   #1
Free/Sbin
Member
 
Iscritto dal: Jul 2006
Messaggi: 38
[C] Differenze tra malloc() e calloc()

Ragazzi che differenze ci stanno tra la funzione malloc() e la funzione calloc() a me sembrano veramente molto simili:

questo esempio che fà? alloca un array formato da 5 elementi di tipo struct data, giusto?

Codice:
#include <stdio.h>
#include <stdlib.h>

struct data{
        char nome[20];
        char cognome[20];
        int anni;
};

typedef struct data data;

int main(){

        data *p;

        p = (data *)calloc(5, sizeof(data));

        free(p);

        return 0;
}
ma non sarebbe stata esattamente la stessa cosa se avessi fatto:
p= malloc(5*sizeof(data)); ? o mi sfugge qualcosa?

Grazie
Andrea
Free/Sbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 11:16   #2
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
La calloc dopo aver allocato memoria, inizializza lo spazio indirizzato a 0
Quindi sarebbe equivalente alla malloc che hai messo, più un memset
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 11:20   #3
Free/Sbin
Member
 
Iscritto dal: Jul 2006
Messaggi: 38
Quote:
Originariamente inviato da Andlea
La calloc dopo aver allocato memoria, inizializza lo spazio indirizzato a 0
Quindi sarebbe equivalente alla malloc che hai messo, più un memset
mmm questa cosa non l'abbiamo studiata...in pratica (se ho capito bene quello che mi hai detto) la calloc mi crea il vettore di 5 strutture e inizializza ogni campo delle 5 strutture a 0 e invece con la malloc avrei dovuto usare la funzione memset per fare tale cosa? giusto o non c'ho capita una fava?
Free/Sbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 11:34   #4
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
giusto
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 11:37   #5
Free/Sbin
Member
 
Iscritto dal: Jul 2006
Messaggi: 38
ah grazie a tutti e due...hehe domani orale...allo scritto non sò coemsia possibile ma ho preso 28...ahhhspero di mantenere anche se mi sento un po' impedito su tante cose
Free/Sbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 11:38   #6
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
sono sicuro che la calloc alloca in modo contiguo. la malloc non credo allochi lo spazio in modo contiguo. quindi se fai una lista puntata da un puntatore p e la allochi con la malloc anzichè con una calloc, se cerchi di accedere ad un suo elemento con *(puntatore+13) non sai bene che cosa andrai a leggere. ma non sono sicurissimo anzi lo chiedo io a mia volta...
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 11:53   #7
Free/Sbin
Member
 
Iscritto dal: Jul 2006
Messaggi: 38
Quote:
Originariamente inviato da Black imp
sono sicuro che la calloc alloca in modo contiguo. la malloc non credo allochi lo spazio in modo contiguo. quindi se fai una lista puntata da un puntatore p e la allochi con la malloc anzichè con una calloc, se cerchi di accedere ad un suo elemento con *(puntatore+13) non sai bene che cosa andrai a leggere. ma non sono sicurissimo anzi lo chiedo io a mia volta...
mmm sapevo anche io che calloc() allocava in modo contiguo...ora però non vorrei dire una cavolata...ma se alloco dinamicamente un vettore con malloc() il vettore in quanto tale è contiguo....allora anche malloc() alloca in modo contiguo? o alloca in tale modo solo per i vettori perchè è una loro proprietà e su una lista concatenata tale discorso non vale più?
attendo risposte anche io...cosa interessante :-)
Quindi come prestazioni sarebbe meglio calloc() anche perchè dovrie fare meno salti nella memoria se fosse confermata tale tesi?
Free/Sbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 14:02   #8
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Free/Sbin
mmm sapevo anche io che calloc() allocava in modo contiguo...ora però non vorrei dire una cavolata...ma se alloco dinamicamente un vettore con malloc() il vettore in quanto tale è contiguo....allora anche malloc() alloca in modo contiguo? o alloca in tale modo solo per i vettori perchè è una loro proprietà e su una lista concatenata tale discorso non vale più?
attendo risposte anche io...cosa interessante :-)
Quindi come prestazioni sarebbe meglio calloc() anche perchè dovrie fare meno salti nella memoria se fosse confermata tale tesi?
mi sembra ovvio che allochi un blocco di memoria
se non fosse cosí andrebbe a puttane tutta l'aritmetica dei puntatori del C
Serve logica per capire un linguaggio logico
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 16:17   #9
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
trallallero premesso che odio le persone saccenti, hai almeno capito qual è il problema che ci stiamo ponendo? hai mai sentito parlare di frammentazione? ti sembra un dubbio stupido?

Ultima modifica di Black imp : 12-07-2006 alle 16:19.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 16:40   #10
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Black imp
trallallero premesso che odio le persone saccenti, hai almeno capito qual è il problema che ci stiamo ponendo? hai mai sentito parlare di frammentazione? ti sembra un dubbio stupido?
e la calloc impedisce la frammentazione? ma per favore...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 16:59   #11
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da 71104
e la calloc impedisce la frammentazione? ma per favore...
non ne ho idea per questo lo chiedo anche se è probabile che si allochi sempre per blocchi in ram perchè non ci sono altri puntatori che recuperino i possibili cluster come nei file. è il modo saccente di rispondere che mi sembra decisamente fuori luogo

[EDIT] mi sono risposto da solo. l'allocazione è per forza contigua solo che la malloc considera solo la dimensione totale mentre la calloc distingue gli elementi della lista e li inizializza.

Ultima modifica di Black imp : 12-07-2006 alle 17:13.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 17:17   #12
fedo
Senior Member
 
L'Avatar di fedo
 
Iscritto dal: Mar 2001
Città: Roma
Messaggi: 2532
forse torna utile quanto detto QUI a centro pagina..

ciao
fedo è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 17:36   #13
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
Quote:
Originariamente inviato da Black imp
non ne ho idea per questo lo chiedo anche se è probabile che si allochi sempre per blocchi in ram perchè non ci sono altri puntatori che recuperino i possibili cluster come nei file. è il modo saccente di rispondere che mi sembra decisamente fuori luogo

[EDIT] mi sono risposto da solo. l'allocazione è per forza contigua solo che la malloc considera solo la dimensione totale mentre la calloc distingue gli elementi della lista e li inizializza.
credo che si dovrebbe scindere l'indirizzo virtuale da quello fisico.
Quando mallochi vedi n locazioni di celle contigue, però quelle locazioni in memoria possono essere disitrubite come gli pare.
Spero di non aver detto cavolate
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 18:18   #14
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da beppegrillo
credo che si dovrebbe scindere l'indirizzo virtuale da quello fisico.
Quando mallochi vedi n locazioni di celle contigue, però quelle locazioni in memoria possono essere disitrubite come gli pare.
Spero di non aver detto cavolate
ma questo discorso, oltre che essere esposto in maniera imprecisa, non c'entra una beata con le differenze tra malloc e calloc; calloc non è altro che questa cosa qui:
Codice:
void *calloc(size_t num, size_t size) {
	void *pv = malloc(num * size);
	if (pv) {
		memset(pv, 0, num * size);
	}
	return pv;
}
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 19:26   #15
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
Quote:
Originariamente inviato da 71104
ma questo discorso, oltre che essere esposto in maniera imprecisa, non c'entra una beata con le differenze tra malloc e calloc; calloc non è altro che questa cosa qui:
Codice:
void *calloc(size_t num, size_t size) {
	void *pv = malloc(num * size);
	if (pv) {
		memset(pv, 0, num * size);
	}
	return pv;
}
Infatti la mia risposta non era data alla differenza tra malloc e calloc, ma sulla definizione "per forza contigua" riferita alla memoria inizializzata con malloc o calloc.
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 21:48   #16
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da beppegrillo
credo che si dovrebbe scindere l'indirizzo virtuale da quello fisico.
Quando mallochi vedi n locazioni di celle contigue, però quelle locazioni in memoria possono essere disitrubite come gli pare.
Spero di non aver detto cavolate
prima infatti avevo il dubbio poi però...
il fatto che gli indirizzi siano virtuali non cambia niente sono solo traslati ma sommati alla base di rilocazione danno l'indirizzo corretto e sono tutti shiftati della stessa quantità - salvo alcuni casi -. il concetto è che effettivamente non ha senso pensare che la malloc allochi non contiguamente... dove mai sarebbero i puntatori che recuperano i vari 'cluster' ? e come accedervi?? no no è necessariamente contigua.

Ultima modifica di Black imp : 12-07-2006 alle 21:51.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 21:57   #17
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
ma queste nozioni così dettagliate dove si studiano?linguaggi e traduttori o cos'altro?
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 22:03   #18
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da D4rkAng3l
ma queste nozioni così dettagliate dove si studiano?linguaggi e traduttori o cos'altro?

io le ho fatte tanto tempo fa in info1 in cui dovevamo saper tradurre in assembly i meccanismi di chiamata alle funzioni fatte in modula2, poi le ho riviste un po' in ingegneria del software e poi leggendo un manuale del nasm.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 22:15   #19
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1455
Quote:
Originariamente inviato da Black imp
prima infatti avevo il dubbio poi però...
il fatto che gli indirizzi siano virtuali non cambia niente sono solo traslati ma sommati alla base di rilocazione danno l'indirizzo corretto e sono tutti shiftati della stessa quantità - salvo alcuni casi -. il concetto è che effettivamente non ha senso pensare che la malloc allochi non contiguamente... dove mai sarebbero i puntatori che recuperano i vari 'cluster' ? e come accedervi?? no no è necessariamente contigua.
Conosci la tabella delle pagine?
Non puoi mai fare nessuna assunzione sulla contiguità dei dati, sia per un array che per una malloc di memoria.
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 22:18   #20
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da D4rkAng3l
ma queste nozioni così dettagliate dove si studiano?linguaggi e traduttori o cos'altro?
a studiarle a cazzo ovunque: le leggi pure qui sul forum, oppure anche all'università; ma se (giustamente) invece ci tieni a saperle bene, puoi affidarti solo alle documentazioni ufficiali, come faccio io.

la documentazione ufficiale di Windows è MSDN; quella ufficiale dell'architettura Intel a 32 bit sono i famosi manuali Intel scaricabili gratuitamente in PDF dal sito Intel. e così via.
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
Kioxia Exceria G3: il modella da 4 TB &e...
Gemini 3.5 Flash delude nei test Android...
DREAME X50 Ultra Complete a 749€ per il ...
Prezzi console handheld alle stelle: la ...
Toyota presenta il primo pickup elettric...
Prime Day anticipato, tutti gli smartpho...
Dyson V10 Konical: il primo aspirapolver...
FSR 4.1 su Radeon 6000, AMD spiega perch...
Hisense svela la gamma TV 2026: RGB Mini...
Narwal lancia gli sconti Prime Day 2026:...
SpaceX ha comprato Cursor: accordo da 60...
Commodore Callback 8020 è il tele...
roborock F25 Ultra a 585€ con Prime: vap...
Apple Watch SE 3 a 219€ e Series 11 a 32...
La lampadina diventa una "biblioteca dig...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v