Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile
BOOX Palma 2 Pro è l'ultima evoluzione della gamma Palma. Ma di cosa si tratta? In breve è un dispositivo e-ink da 6,13 pollici che sfida le convenzioni con un display Kaleido 3 a colori, supporto per stilo InkSense Plus, connettività 5G solo dati e alimentato dal sistema operativo Android 15. Con queste caratteristica si configura come qualcosa in più di un semplice e-reader
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-03-2007, 16:55   #1
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
[C] Le variabili globali sono tutte inizzializzate di default del compilatore C?!

In che modo sono inizializzate?!
A 0?! Quindi direi che sono azzerate no?!

Se la risposta è si allora di conseguenza questa dichiarazione globale:

/* Variabili esterne per evitare il passaggio di troppi parametri tra funzioni */
int enclosure=NO, titolo=NO, descrizione=NO;
int count_item=0, canale_numero=0, side_pages=0;
char enclosure_url[SIZEBUF], enclosure_localpath[SIZEBUF];
char enclosure_nomefile[SIZEBUF], enclosure_type[SIZEBUF];
char *descrizione_strptr[MAXLINES], *enclosure_str, *titolo_str, *canale_titolo;

ha il solo scopo di rendere il codice + leggibile ed intuitivo?! Giusto?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 11-03-2007 alle 17:08.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 17:30   #2
xorshadow
Member
 
L'Avatar di xorshadow
 
Iscritto dal: Feb 2007
Messaggi: 38
In C nessuna area di memoria viene inizializzata automaticamente. Al momento della creazione di un buffer(o di una variabile) statico o dinamico, questo contiene valori non predicibili.
Per fare quello che tu vorresti, protresti incapsulare la variabile globale all'interno di una funzione dichiarando la stessa variabile come static e quindi iniziallizzarla e ritornarla.
xorshadow è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 17:49   #3
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
/* Variabili esterne per evitare il passaggio di troppi parametri tra funzioni */
No, è assolutamente stilisticamente brutto.
Se devi passare troppe variabili è possibile che tu abbia progettato male la suddivisione in funzioni. Ad esempio potresti aver funzioni troppo lunghe.
Se ciò non è vero potresti raggrupparle in strutture e passare la sola struttura.

Le variabili globali solitamente sono inizializzate a 0, ma non sono sicuro che sia obbligatorio, anzi, credo che sia una di quelle cose che lo standard lascia all'implementazione del compilatore.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 18:17   #4
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
OOOK, il prossimo programma gli starò attento.
Ormai è quello che è e da qui devo andare avanti.
CMQ anche sul Kernigan lo dice.

Quello della inizializzazione invece non ne sono sicuro, ma l'avevo letto da qualche parte.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 18:46   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Molti compilatori lo fanno, ma non è detto che lo facciano tutti
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 18:51   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
CMQ anche sul Kernigan lo dice.
Il K&R ha anche 40 anni
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 18:54   #7
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Cionci farò esperienza e migliorerò, anche grazie al vostro aiuto.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 18:54   #8
xorshadow
Member
 
L'Avatar di xorshadow
 
Iscritto dal: Feb 2007
Messaggi: 38
Quote:
Molti compilatori lo fanno, ma non è detto che lo facciano tutti
Oltre a non farlo tutti, quelli che lo fanno ti stanno solo facendo un favore!
Se poi cerchi di compilare con qualche opzione di ottimizzazione della velocità puoi star certo che nessun compilatore ti inizializzarà niente.
E ci sono dei motivi dietro:
1) E' costoso
2) E' inutile, perchè il compilatore non può sapere a priori quale è il valore di default di una variabile perchè non sa quale semantica rappresenta.
Quindi dare per scontata l'inizializzazione della memoria è un errore di programmazione.

Ultima modifica di xorshadow : 11-03-2007 alle 19:05.
xorshadow è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 19:26   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Al contrario, l'inizializzazione a zero è a costo zero, perché il valore dell'inizializzazione delle variabili globali e statiche viene automaticamente caricato dall'immagine dell'eseguibile.
Semplicemente durante la creazione della parte riguardante i dati all'interno dell'eseguibile, il valore delle variabili non inizializzate viene impostato a zero.

Comunque non sono sicuro che lo imponga lo standard, l'unica cosa è questa.

Ultima modifica di cionci : 11-03-2007 alle 19:28.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 20:02   #10
xorshadow
Member
 
L'Avatar di xorshadow
 
Iscritto dal: Feb 2007
Messaggi: 38
Quote:
Originariamente inviato da cionci Guarda i messaggi
Al contrario, l'inizializzazione a zero è a costo zero, perché il valore dell'inizializzazione delle variabili globali e statiche viene automaticamente caricato dall'immagine dell'eseguibile.
Se carica un valore di inizializzazione vuol dire che la variabile viene inizializzata, e se non sbaglio non si sta parlando di questo, anzi si sta parlando del contrario, cioè se NON viene inizializzata.
Comunque, se la variabile non è esplicitamente inizializzata nel codice sorgente, quando viene caricato l'eseguibile, viene semplicemente riservato (ma non viene assolutamente ne letto ne scritto) dello spazio in memoria per tale variabile.

Quote:
Originariamente inviato da cionci Guarda i messaggi
Semplicemente durante la creazione della parte riguardante i dati all'interno dell'eseguibile, il valore delle variabili non inizializzate viene impostato a zero.
E questo ha un costo ovviamente. Impostare qualcosa costa di più del NON impostare.

Ultima modifica di xorshadow : 11-03-2007 alle 20:06.
xorshadow è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 20:31   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
non ho letto tutti i post ma dico la mia sperando di non essere ripetitivo: non devi assolutamente affidarti al fatto che le variabili (globali o non) in C vengano inizializzate automaticamente a zero o qualche altro valore perché afaik lo standard non prevede nessuna inizializzazione implicita.

aldilà di questo però posso dirti che, per cause dovute al funzionamento del compilatore e di Windows stesso, accade che quando compili un .exe per Windows le variabili globali non inizializzate sono quasi sempre inizializzate come aree di memoria completamente azzerate. ma vedila solo come una curiosità tecnica, anche perché vale solo per le variabili globali e non per quelle locali, che spesso invece assumono valori difficilmente predictable.

PS: di Linux non so nulla in merito

Ultima modifica di 71104 : 11-03-2007 alle 20:37.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 20:34   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Chiariamo che si parla solo di variabili globali e statiche. Per questo nell'eseguibile c'è una sezione dedicata a queste variabili e tutte vengono inizializzate, anche quelle che non lo sono con valore pari a zero.
Questo proprio per una questione di prestazioni, immaginati questa situazione:

int x = 0;
int y;
int z = 0;

Come codifichi nell'eseguibile questa situazione ?
Ci possono essere due scelte:
- riservare 12 byte ed inizializzare x e z a runtime
- scrivere 12 byte nell'eseguibile che descrivono il valore di tutte le variabili (anche quelle non inizializzate, assegnandogli un valore scelto, zero in molti casi) e prendere tutto il blocco e metterlo in memoria

La prima necessita anche che ci sia del codice che inizializza le variabili a runtime. Quindi c'è, oltre allo spazio e al tempo necessario per caricare in memoria il codice che deve inizializzare le variabili, anche il tempo perso nell'esecuzione delle istruzioni. Fai conto che un semplice mov memoria, valore sono 1 byte di opcode, 4 byte per l'indirizzo della memoria e 4 byte per il valore e questo per ogni variabile da inizializzare.

La seconda è la più semplice e la più veloce perché consente di trasferire in burst direttamente TUTTA l'immagine dell'eseguibile in memoria (ovviamente se non c'è bisogno di un caricamento rilocante). Infatti visto che devo trasferire già il codice trasferire anche i dati ha un costo minimo.

Il riservare spazio si fa soltanto per le variabili locali...quelle sì che mantengono il valore che c'era prima nelle rispettive locazioni dello stack che sono state loro riservate.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 20:34   #13
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ah, e dimenticavo: per il C++ invece il discorso è molto diverso in quanto una variabile potrebbe essere di tipo class, ed in tal caso esiste un'inizializzazione implicita dovuta al costruttore. però credo che tu non possa fare affidamento all'inizializzazione dei campi di quella classe non esplicitamente inizializzati nel costruttore.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 20:53   #14
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
A me a scuola han detto come a Cionci.
Anche 71XXX ha notato che di fatto in Winzoz succede.
Succede anche in Linux/Unix.

La faccenda del costono lasciamola perdere perchè la complessità spaziale e temporale va considerata asintoticamente.
Praticamente quelle poche istruzioni sono insignificanti.

CMQ io inizializzo anche le globali.
Poi ci penserà il compilatore a sistemare tutto.

[PS]
CMQ il C mi sta martoriando le balle.
Quando finirò il progetto spero di non toccarlo +.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 11-03-2007 alle 20:56.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 20:56   #15
xorshadow
Member
 
L'Avatar di xorshadow
 
Iscritto dal: Feb 2007
Messaggi: 38
Quote:
Originariamente inviato da cionci Guarda i messaggi
Chiariamo che si parla solo di variabili globali e statiche. Per questo nell'eseguibile c'è una sezione dedicata a queste variabili e tutte vengono inizializzate, anche quelle che non lo sono con valore pari a zero.
Anche le variabili globali e statiche vengono create nello stack (non credo proprio che vengano create nello heap o nell'area del codice o peggio nell'area dati in cui ci sono dati "costanti" e non variabili).
Non confonderti con le variabili costanti.
xorshadow è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 21:02   #16
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da xorshadow Guarda i messaggi
Non confonderti con le variabili costanti.
Le DEFINE?!
No no io mi ricordo che insegnavano le VAR globali.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 21:07   #17
xorshadow
Member
 
L'Avatar di xorshadow
 
Iscritto dal: Feb 2007
Messaggi: 38
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
A me a scuola han detto come a Cionci.
Cioè? Voglio sapere quale cosa in particolare.

Quote:
Anche 71XXX ha notato che di fatto in Winzoz succede.
Succede anche in Linux/Unix.
Sul fatto che può succede siamo d'accordo tutti. Ma nessun programmatore serio si affiderebbe ad un "può succedere che il mio programma vada bene".

Quote:
La faccenda del costono lasciamola perdere perchè la complessità spaziale e temporale va considerata asintoticamente.
Praticamente quelle poche istruzioni sono insignificanti.
Il costo era per spiagare il perchè non vengono inizializzate e comunque, anche l'inizializzazione può avere un peso se rapportato all'enorme numero di variabili di un programma.
xorshadow è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 21:09   #18
xorshadow
Member
 
L'Avatar di xorshadow
 
Iscritto dal: Feb 2007
Messaggi: 38
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
Le DEFINE?!
No no io mi ricordo che insegnavano le VAR globali.
Chi ha parlato di DEFINE?
Parlo di cose del tipo
Codice:
const int blabla;
xorshadow è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2007, 21:14   #19
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Matrixbob Guarda i messaggi
Anche 71XXX ha notato che di fatto in Winzoz succede.
succede a causa di una particolarità (documentata!) nel meccanismo dell'allocazione delle pagine di memoria virtuale in Win32: le pagine allocate sono inizializzate a zero, cioè sono sempre completamente azzerate. le variabili globali (o locali statiche) non inizializzate di un eseguibile risiedono solitamente in particolari sezioni dell'eseguibile che hanno raw size = 0 e virtual size > 0 (ovvero: nel file non occupano spazio, ma nell'immagine in memoria dell'eseguibile si); questo fa si' che le pagine dedicate a quelle sezioni non subiscano nessuna inizializzazione se non quella da parte di Windows dovuta appunto alla loro allocazione.

ora vedo se ritrovo in MSDN la parte che documentava l'inizializzazione delle pagine di memoria virtuale...

EDIT - ecco qua: http://msdn2.microsoft.com/en-us/library/aa366887.aspx (leggere le primissime righe)
vero è che si potrebbe anche precisare che l'inizializzazione è documentata relativamente a quella funzione, e non al kernel; di conseguenza non si può fare affidamento sull'"inizializzazione implicita" in un ipotetico sistema che supporti Win32 per compatibilità; e aldilà di questo troppi sono i meccanismi che stanno dietro all'azzeramento implicito delle variabili non inizializzate, tutti meccanismi che potrebbero teoricamente (anche se poco probabilmente) cambiare e che riducono comunque la portabilità dei tuoi sorgenti, e sui quali quindi non puoi basarti. ribadisco: prendi tutto questo come una curiosità tecnica

Ultima modifica di 71104 : 11-03-2007 alle 21:20.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2007, 10:19   #20
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da 71104 Guarda i messaggi
le variabili globali (o locali statiche) non inizializzate di un eseguibile risiedono solitamente in particolari sezioni dell'eseguibile che hanno raw size = 0 e virtual size > 0 (ovvero: nel file non occupano spazio, ma nell'immagine in memoria dell'eseguibile si); questo fa si' che le pagine dedicate a quelle sezioni non subiscano nessuna inizializzazione se non quella da parte di Windows dovuta appunto alla loro allocazione.
Su linux è più o meno la stessa cosa, i dati non inizializzati finiscono in una regione elf chiamata BSS che serve appunto a questo.
Di norma questa regione è inizializzata a 0 (guai se non fosse inizializzata! Perché? ), e gli ultimi gcc anzi spostano di default le inizializazzioni esplicite a 0 in BSS.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica Fondazione Chips-IT, l'Italia alla riscossa nei ...
E se fosse l'UE a far scoppiare la bolla...
Non solo sport: su DAZN arrivano i canal...
Apple e Samsung dominano la Top 10 degli...
Ring Intercom Audio costa solo 24€ e sta...
4 portatili tuttofare in super sconto: s...
Amazfit Active 2 a 74,99€ è imper...
10 anni di DirectX 12: Microsoft festegg...
Bose QuietComfort Ultra (2ª Gen) scendon...
Malware su un traghetto italiano: indagi...
Virtualizzazione: arriva Nutanix with Fl...
Apple applica commissioni ancora troppo ...
AGCOM: il colpo di grazia al telemarketi...
Bari punta sull'elettrico: arrivano 42 a...
Prezzi in salita di 200 dollari in 6 ann...
Google introduce CC: l'AI che riassume l...
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: 08:57.


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