Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-07-2006, 12: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, 12: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, 12: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, 12: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, 12: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, 12: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, 12: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, 15: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, 17: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 17:19.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 17: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, 17: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 18:13.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 18: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, 18: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, 19: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, 20: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, 22: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 22:51.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 22: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, 23: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, 23: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, 23: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


Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
iPad 12 arriverà nel 2026 e sar&a...
AMD per il futuro dell'IA in Corea del S...
L'IA agentica incrementa il rischio cybe...
Rapporto Clusit 2026: finanza e infrastr...
Gli stessi sali che solidificano il tofu...
Il conflitto in Medio Oriente minaccia l...
OnlyFans, scomparso il proprietario Leon...
Le migliori offerte Amazon da leggere in...
Recensioni su Trustpilot non affidabili,...
Il CISPE denuncia Broadcom all'antitrust...
Il cyberattacco che negli Usa ha trasfor...
AI Grid Intelligent Orchestration, l'inf...
Roborock Qrevo CURV 2 Flow X: tecnologia...
Quanto viaggia il modem di iPhone Air? I...
300 GB di memoria RAM per le future gene...
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: 23:45.


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