Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Esecuzione di un programma C
Forum - C/C++ - Esecuzione di un programma C - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 20:26
Martedì, 20/12/2016
Testo quotato


1° passo: int a = 10; - aggiungo un frame in testa alla pila contenente l'associazione: (a, 10)



No. Non so dove hai trovato queste informazioni (o chi te le ha comunicate), ma non funziona cosi'. int a = 10 e' una variabile globale, e viene referenziata senza l'uso di nessuno stack frame (non avrebbe senso).

Prendi le note del tuo corso e mettile da parte! Comincia da zero e rileggi i seguenti argomenti:

https://it.wikipedia.org/wiki/Call_stack
https://en.wikipedia.org/wiki/X86_calling_conventions#cdecl

Non guardare il programma in C! Leggi il listino in Assembly (cerca su Google le basi di Assembly per x86) e capirai meglio come funziona. Assembly e' una rappresentazione 1 ad 1 di quello che viene effettivamente eseguito sul computer, C e' un linguaggio ad alto livello e non saprai mai con certezza cosa succede all'interno!

Ultima modifica effettuata da pierotofy il 20/12/2016 alle 20:28


Il mio blog: https://piero.dev
PM Quote
Avatar
Godrek (Normal User)
Pro


Messaggi: 76
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 21:12
Martedì, 20/12/2016
Hai ragione. Ho appena letto, correggetemi se è giusto, che la memoria RAM è suddivisa in 4 parti:
- area codice
- area variabili globali
- area stack
- heap

e le variabili globali non vanno sullo stack, ma in esso vanno soltanto le variabili locali delle funzioni.

Per quanto riguarda la definizione di una funzione, cosa succede, nello stack frame, quando una funzione viene definita?
E quando viene chiamata?

Per quanto riguarda l'assembly non ci capisco niente e per ora, a causa degli esami, non avrei neanche tempo da dedicarci.

Ultima modifica effettuata da Godrek il 20/12/2016 alle 21:16
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 21:28
Martedì, 20/12/2016
Testo quotato

Postato originariamente da Godrek:

Hai ragione. Ho appena letto, correggetemi se è giusto, che la memoria RAM è suddivisa in 4 parti:
- area codice
- area variabili globali
- area stack
- heap

e le variabili globali non vanno sullo stack, ma in esso vanno soltanto le variabili locali delle funzioni.



E' una generalizzazione e non e' sempre corretto, ma a volte il layout e' quello che hai descritto. Non si parla inoltre di "memoria RAM" che comprende tutta la memoria disponibile, ma dell'"area di memoria allocata per il processo".

Testo quotato


Per quanto riguarda la definizione di una funzione, cosa succede, nello stack frame, quando una funzione viene definita?



Niente! Una funzione e' definita nella .code o .text section. Cosa c'entrano gli stack frame?

Testo quotato


E quando viene chiamata?



Dipende dalla convenzione usata... cdecl, syscall, stdcall, fastcall, etc. etc. per questo devi leggere l'Assembly!

Testo quotato


Per quanto riguarda l'assembly non ci capisco niente e per ora, a causa degli esami, non avrei neanche tempo da dedicarci.



Mi dispiace, ma non penso riuscirai a capire il funzionamento di quello di cui stiamo parlando. E' come cercare di capire la grammatica francese senza aver studiato francese.


Il mio blog: https://piero.dev
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 16:04
Mercoledì, 21/12/2016
È vero che senza una conoscenza anche minima di assembly non si possono capire a fondo queste cose, però puoi ugualmente capire gli stack frame guardando come viene eseguito un programma in C.
In teoria basterebbe fare un po' di prove con le funzioni e vedere cosa succede, altrimenti impara ad usare un debugger (spesso gli IDE ne hanno uno integrato relativamente facile da usare). A quel punto ti basta andare di "step" per il codice.

La spiegazione semplificata (e, diciamolo, sbagliata) degli stack frame che ti hanno dato puoi a mio modesto parere buttarla nel cassonetto della spazzatura.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo