Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5 introduce Dynamic Multi Frame Generation e MFG 6X, permettendo fino a cinque frame generati per ogni frame renderizzato. I test su Cyberpunk 2077 e 007 First Light mostrano forti incrementi di FPS e riduzione della latenza su RTX 5090 Laptop. Migliorano fluidità, stabilità e qualità visiva.
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Quattro modi di indossarlo, stessa app del Plaud Note Pro e integrazione con il desktop. Il registratore IA da indossare di Plaud eccelle in mobilità, ma resta vincolato all'abbonamento ed è facile da perdere
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-01-2014, 11:40   #1
sharkkk
Member
 
L'Avatar di sharkkk
 
Iscritto dal: Oct 2013
Messaggi: 158
[C] Puntatori e pila

Supponendo di avere un programma che fa solo

Codice:
int main()
{

    int var = 0;
    int *p;

    p = &a;

    ...non importante

}
nella pila come viene gestito il tutto?

cioè:

1 - int var = 0; var viene messo nella pila, ma viene inserito anche il suo valore nello stack oppure va in un altro segmento?
2- int var = 0; per allocare un intero in memoria usiamo 4 byte, pero c'e anche il nome della variabile (var) che sono 3 caratteri piu il terminatore, quindi sulla pila avremmo 4 byte del nome della variabile piu 4 byte del contenuto della variabile?
3- int *p; quando dichiaro un puntatore, nello stack che valore gli viene assegnato di default? viene creato un indirizzo dinamico dall'heap che viene assegnato al puntatore?
4- p = &a; a questo punto nella pila cosa succede? a p assegniamo l'indirizzo della variabile a, ma come fa a prenderla, chi deteneva l'indirizzo della variabile?

sicuramente ho fatto 1000! errori ma sto cercando di imparare come lavora la pila

p.s. questo prototipo di funzione void *f(); è uguale a void f(); o sono due cose diverse?

Ultima modifica di sharkkk : 20-01-2014 alle 11:55.
sharkkk è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2014, 13:25   #2
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Ciao,
1 - nello stack viene inserito solo il valore di var, in questo caso 4 byte tutti a zero;
2 - i nomi delle variabili figurano solo nel sorgente, una volta compilato il programma non vengono più presi in considerazione, pertanto non occupano spazio in memoria;
3 - quando dichiari un puntatore senza inizializzarlo, viene solo decrementato lo stack pointer, senza scrivere alcun valore (vale anche per variabili non inizializzate), pertanto assume il valore che si trovava in quell'area dello stack (praticamente spazzatura);
4 - gli indirizzi delle variabili li decide il compilatore (a meno di eventuali offset per la rilocazione del programma in memoria) e restano invariati per tutta la fase di compilazione.

Se dichiari una funzione void vuol dire che quella funzione non restituisce alcun valore. se la dichiari come void* vuol dire che restituisce un puntatore a void, ovvero un puntatore ad un tipo di dato non determinato; tipicamente si utilizza quando la stessa funzione può restituire un puntatore a dati di diverso tipo; sta al chiamante determinare che tipo di dato viene restituito in base alle specifiche della funzione.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2014, 13:45   #3
sharkkk
Member
 
L'Avatar di sharkkk
 
Iscritto dal: Oct 2013
Messaggi: 158
grazie mille daniele.

volevo chiederti due cose che non ho ancora ben chiare:

1) so che la funzione void f(){..} restituisce un void, tu dici che void *f() restituisce un puntatore a void..quindi è uguale a scrivere *void f()?

2)se i nomi delle variabili non vengono considerati piu una volta compilato il programma, se il programma implica una modifica di una variabile, ad esempio un incremento (x++) come fa a sapere il valore che aveva prima quella variabile se non ne conosco il nome?
sharkkk è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2014, 14:25   #4
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
1) Personalmente non ricordo di aver mai visto l'asterisco scritto prima del tipo di dato, credo che *void generi un errore di sintassi.

2) (come ho scritto prima) una volta che il compilatore ha assegnato un indirizzo ad una variabile, tale indirizzo rimane invariato durante tutta la fase di compilazione e (aggiungo) resta legato alla variabile a cui è assegnato; pertanto, ogni volta che il compilatore incontra la variabile x - qualunque operazione tu voglia fare con essa - utilizzerà l'indirizzo assegnato al momento della dichiarazione.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2014, 15:04   #5
sharkkk
Member
 
L'Avatar di sharkkk
 
Iscritto dal: Oct 2013
Messaggi: 158
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
1) Personalmente non ricordo di aver mai visto l'asterisco scritto prima del tipo di dato, credo che *void generi un errore di sintassi.

2) (come ho scritto prima) una volta che il compilatore ha assegnato un indirizzo ad una variabile, tale indirizzo rimane invariato durante tutta la fase di compilazione e (aggiungo) resta legato alla variabile a cui è assegnato; pertanto, ogni volta che il compilatore incontra la variabile x - qualunque operazione tu voglia fare con essa - utilizzerà l'indirizzo assegnato al momento della dichiarazione.
grazie mille daniele, alla fine è tutto piu semplice di quello che sembra.

la dichiarazione del prototipo void *f(); mi aveva spiazzato perche avevo letto che le funzioni erano dei puntatori e vedere * prima della funzione pensavo fosse un puntatore a puntatore, invece come mi hai spiegato è cioè che viene restituito, un puntatore a void.

grazie mille ancora
sharkkk è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2014, 18:04   #6
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da sharkkk Guarda i messaggi
grazie mille daniele, alla fine è tutto piu semplice di quello che sembra.

la dichiarazione del prototipo void *f(); mi aveva spiazzato perche avevo letto che le funzioni erano dei puntatori e vedere * prima della funzione pensavo fosse un puntatore a puntatore, invece come mi hai spiegato è cioè che viene restituito, un puntatore a void.

grazie mille ancora
Infatti l'asterisco dovrebbe stare attaccato al tipo, anzichè alla variabile (o alla funzione), perchè va a modificare il tipo. Invece i C-isti lo attaccano alle variabili...bah!
Cmq non si dice "restituisce un void", perchè void non è un tipo. Indica la mancanza di un valore di ritorno.
void* invece significa un puntatore a qualsiasi tipo. Una funzione che accetta un parametro void* può prendere in ingresso un puntatore qualsiasi. Poi lo casta a quel che le serve e lo usa, ed è un passaggio obbligato visto che non puoi dereferenziare una variabile void:
void* a = f();
*a = 3; // errore
*((int*)a) = 3; // ok (sintatticamente, per lo meno)
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2014, 19:30   #7
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Infatti l'asterisco dovrebbe stare attaccato al tipo, anzichè alla variabile (o alla funzione), perchè va a modificare il tipo. Invece i C-isti lo attaccano alle variabili...bah!
Personalmente l'asterisco lo attacco (come i C-isti) alla variabile perchè dichiarazioni del tipo:

Codice:
int *x, y;
scritta così mi rende chiaro subito che x è puntatore e y no. Al contrario:
Codice:
int* x, y;
così sembrano entrambi variabili di tipo int* (ossia puntatori a int)
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2014, 22:10   #8
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da Oceans11 Guarda i messaggi
Personalmente l'asterisco lo attacco (come i C-isti) alla variabile perchè dichiarazioni del tipo:

Codice:
int *x, y;
scritta così mi rende chiaro subito che x è puntatore e y no. Al contrario:
Codice:
int* x, y;
così sembrano entrambi variabili di tipo int* (ossia puntatori a int)
Perchè ti capita spesso? Io metto una variabile per riga cmq, più chiaro per me.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2014, 23:01   #9
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Perchè ti capita spesso? Io metto una variabile per riga cmq, più chiaro per me.
No in realtà non lo faccio capitare, metto anche io una variabile per riga.
Volevo dire che ho fatto mio quello stile di format quando ho approcciato al c e quello mi è rimasto.
Devo dire che però non così infrequentemente incontro codice (di altre persone) che usa l'altro tipo.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2014, 07:44   #10
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Sintatticamente è corretto in entrambi i modi, io personalmente ricordo di aver variato il mio stile, gli ultimi programmi che ho scritto in c avevano l'asterisco attaccato alla variabile. In ogni caso ho sempre adottato il metodo di scrivere una variabile per riga, lo trovo molto più chiaro.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2014, 19:56   #11
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3974
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Sintatticamente è corretto in entrambi i modi, io personalmente ricordo di aver variato il mio stile, gli ultimi programmi che ho scritto in c avevano l'asterisco attaccato alla variabile. In ogni caso ho sempre adottato il metodo di scrivere una variabile per riga, lo trovo molto più chiaro.
ma anche più lungo
tu scrivi:
int a;
int b;
int *c;
char *T;
float m;
....
....
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2014, 20:07   #12
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
La gente fa sempre a gara per quello e tu ti preoccupi di risparmiare

A parte gli scherzi, nomi di variabili a, b, c possono andare bene a scuola, in un progetto serio si utilizzano quasi sempre nomi mnemonici di discreta lunghezza (chi non lo fa dovrebbe cominciare), basta metterne 3 sulla stessa riga per andare oltre il margine. Avendo scritto di recente programmi su terminale 3270 ho trovato molto sconveniente superare i 72 caratteri per riga, la navigazione diventa un inferno, poi, de gustibus...
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2014, 10:13   #13
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3974
si puo' andare a capo con la virgola per evitare di ripetere int
su programmi complessi converrebbe proprio creare l'.h solo per le variabili, uno solo per le costanti ecc
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2014, 19:48   #14
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3974
le metti dentro la funzione, ovviamente
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2014, 08:08   #15
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Credo che intendesse dire "mettere l'include nella funzione". A me personalmente non piace quest'approccio ma, come ho detto prima, è questione di gusti.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2014, 10:49   #16
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3974
dipende quanto vasto è il programma

potrebbe far comodo anche la realizzazione di librerie condivise ecc per unificare il codice
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2014, 18:15   #17
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da bancodeipugni Guarda i messaggi
dipende quanto vasto è il programma

potrebbe far comodo anche la realizzazione di librerie condivise ecc per unificare il codice
Che trovata geniale!!!
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2014, 20:27   #18
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3974
prova in c:\windows\system32

è pieno
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2014, 11:25   #19
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3974
l'estetica nei prg conta fino a mezzogiorno conta che funzionino
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Le auto volanti (elettriche) in Cina son...
Senua è il sequel di Hellblade II...
La Commissione europea taglia le bollett...
Halo: Campaign Evolved, annunciata la da...
Sega rilancia Crazy Taxi con World Tour:...
Pagare per avere meno: Brave Origin vuol...
L'italiana Bending Spoons sbarca a Wall ...
Have I Been Pwned tocca quota 1000 data ...
Microsoft conferma la nuova uscita di Fa...
WWDC 2026 è oggi: come seguire il keynot...
L'IA cambia Internet: i bot superano il ...
DeepSeek V4 Pro supera GPT 5.5 Pro: nei ...
Destiny 2 sta per morire, la community s...
Microsoft cede: la ricerca di Windows 11...
Dopo quasi 30 anni, l'originale Thief di...
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: 15:48.


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