Micheles
2005-01-20 10:50:06 UTC
Ciao ,
Avrei delle domande che probabilmente ai più sembreranno banali ma avere
delle risposte per me sarebbe importante.
Io ho un programma scritto in linguaggio C++; per quel che ne so, quando lo
stesso va in esecuzione gli vengono riservate 4 zone di memoria così
denominate:
1) Area Codice
2)Area Dati Globali
3)Stack
4)Heap
1)L'Area codice contiene ovviamente il codice del programma
2)L'Area Dati Globali contiene tutte le variabili a cui viene assegnata
memoria in modo statico ovvero per tutta la durata del programma.
Finiscono in questa area:
-variabili globali
-eventuali dati membri statici delle classi
-variabili locali statiche di funzioni
-...........
3) Nello Stack finiscono i record di attivazione delle funzioni che
contengono parametri, variabili locali non statiche, indirizzo di
ritorno,valore restituito dalla funzione.Quando la funzione termina il
record di attivazione viene tolto.Pertanto lo Stack, come l'Heap,varia
dinamicamente.
4)Nell'Heap viene allocata memoria per i puntatori in modo dinamico mediante
le funzioni "new" o "malloc".-
Le dimensioni dell'Area Codice e dell'Area Dati sono note fin dall'inizio
dell'esecuzione del programma.
L'Heap e lo Stack invece variano dinamicamente.La mia domanda è: all'inizio
dell'esecuzione del programma valgono "0" e poi man mano che il programma si
sviluppa variano dinamicamente la propria dimensione? Oppure, fin
dall'inizio al programma viene assegnata un'area Eeap e un'area Stack
entrambe con una certa dimensione e ,quindi, ciò che varia dinamicamente è
la percentuale di occupazione di queste aree con le dimensioni fissate? In
questo secondo caso, chi è che stabilisce quando debba essere grande l'Heap
e quanto debba essere grande lo Stack?Il compilatore? Non ci sarebbe il
pericolo che data una dimensione troppo piccola all'Heap durante
l'esecuzione del programma questa venga prima riempita e poi superata
conducendo il programma al crash?
Suppongo di lavorare in ambiente windows.
Grazie
Avrei delle domande che probabilmente ai più sembreranno banali ma avere
delle risposte per me sarebbe importante.
Io ho un programma scritto in linguaggio C++; per quel che ne so, quando lo
stesso va in esecuzione gli vengono riservate 4 zone di memoria così
denominate:
1) Area Codice
2)Area Dati Globali
3)Stack
4)Heap
1)L'Area codice contiene ovviamente il codice del programma
2)L'Area Dati Globali contiene tutte le variabili a cui viene assegnata
memoria in modo statico ovvero per tutta la durata del programma.
Finiscono in questa area:
-variabili globali
-eventuali dati membri statici delle classi
-variabili locali statiche di funzioni
-...........
3) Nello Stack finiscono i record di attivazione delle funzioni che
contengono parametri, variabili locali non statiche, indirizzo di
ritorno,valore restituito dalla funzione.Quando la funzione termina il
record di attivazione viene tolto.Pertanto lo Stack, come l'Heap,varia
dinamicamente.
4)Nell'Heap viene allocata memoria per i puntatori in modo dinamico mediante
le funzioni "new" o "malloc".-
Le dimensioni dell'Area Codice e dell'Area Dati sono note fin dall'inizio
dell'esecuzione del programma.
L'Heap e lo Stack invece variano dinamicamente.La mia domanda è: all'inizio
dell'esecuzione del programma valgono "0" e poi man mano che il programma si
sviluppa variano dinamicamente la propria dimensione? Oppure, fin
dall'inizio al programma viene assegnata un'area Eeap e un'area Stack
entrambe con una certa dimensione e ,quindi, ciò che varia dinamicamente è
la percentuale di occupazione di queste aree con le dimensioni fissate? In
questo secondo caso, chi è che stabilisce quando debba essere grande l'Heap
e quanto debba essere grande lo Stack?Il compilatore? Non ci sarebbe il
pericolo che data una dimensione troppo piccola all'Heap durante
l'esecuzione del programma questa venga prima riempita e poi superata
conducendo il programma al crash?
Suppongo di lavorare in ambiente windows.
Grazie