Da cosa dipende la massima memoria allocabile in un programma in C
ed esiste un modo per aumentarla?
Io riesco ad allocare al max circa 3 Mb....
Da cosa dipende la massima memoria allocabile in un programma in C
ed esiste un modo per aumentarla?
Io riesco ad allocare al max circa 3 Mb....
In linea di massima, dalla disponibilità di spazio di indirizzi, memoria fisica e memoria virtuale.Originariamente inviato da fab333
Da cosa dipende la massima memoria allocabile in un programma in C
Come la stai allocando? Sullo stack o sull'heap?Io riesco ad allocare al max circa 3 Mb....
Amaro C++, il gusto pieno dell'undefined behavior.
Non ne ho idea, io intendo allocare la memoria semplicemente nel dichiarareOriginariamente inviato da MItaly
Come la stai allocando? Sullo stack o sull'heap?
le variabili. Se uso array troppo grandi il programma in esecuzione mi va
in segmention fault.
Conosco anche l'allocazione dinamica della memoria, ma da questo punto
di vista non mi pare che cambi molto.
Cambia eccome. Le variabili locali sono allocate sullo stack, che è di dimensioni relativamente ridotte, mentre ciò che è allocato con malloc & co. è allocato nell'heap, dove puoi allocare grandi quantità di dati (se la macchina non ha particolari limiti di memoria fisica, virtuale e di spazio di indirizzi puoi allocare tranquillamente più di 1 GB di memoria senza problemi).
Amaro C++, il gusto pieno dell'undefined behavior.
se faccio un semplice programma in cui provo ad allocare la massima quantità di memoria possibile,
questa è molto grande sia se la alloca in maniera automatica sia in maniera dinamica.
La differenza è che nel caso automatico l'errore di dimensione troppo grande mi viene dato già in compilazione,
mentre nel caso dinamico solo in esecuzione.
Nel caso che mi interessa però uso solo variabili automatiche (uso array di long double in 5 dimensioni), in
compilazione non mi viene dato nessun errore, ma se vado in esecuzione mi dà 'Segmentation fault'.
Quindi le idee mi si sono ancora più confuse: perché se faccio un programma semplice posso allocare
una quantità enorme di memoria, mentre nel mio caso riesco a usare solo 3 Mb?
Credo che facendo così esaurisci lo stack, che non è infinito.
Quando devi allocare degli array grossi devi sempre andare sull'heap, altrimenti esaurisci lo spazio a disposizione per lo stack e il programma riceve il SIGSEV.
"Let him who has understanding reckon the number of the beast, for it is a human number.
Its number is rw-rw-rw-."
A me invece se uso verso i 2mb inizia a crashare.
Scusate l' ignoranza ma non si potrebbe allocare tutto sulla ram?
Come già detto cento volte, se stai allocando sullo stack (ossia tramite variabili locali) è normale.Originariamente inviato da ramy89
A me invece se uso verso i 2mb inizia a crashare.
Sia lo stack che l'heap stanno nella RAM, la differenza sta in come vengono gestiti. Leggiti un po' delle risposte qui.Scusate l' ignoranza ma non si potrebbe allocare tutto sulla ram?
Amaro C++, il gusto pieno dell'undefined behavior.
Non hai capito cosa intendevo dire.Lo so che è normale.
Ma non capisco perchè su 4gb di ram ne usa al massimo 2 mb,era questo.
Se ti va di rispondere senza criticare fai pure.
Per diversi motivi:Originariamente inviato da ramy89
Non hai capito cosa intendevo dire.Lo so che è normale.
Ma non capisco perchè su 4gb di ram ne usa al massimo 2 mb,era questo.
Se ti va di rispondere senza criticare fai pure.
1 la memoria va divisa tra tutti i processi che hai in esecuzione
2 per ovvi criteri di sicurezza non tutta la memoria è allocabile da processi utenti
3 sempre per ovvi motivi di sicurezza (oltre che di rapidità nel cambio di contesto) a nessun programma verrebbe mai concesso di appropriarsi di tutta la memoria disponibile
e altri di minore importanza
Se per di più usi un allocazione statica, e quindi ti poggi sullo stack, il sistema alloca solo uno spazio di memoria ristretto all'interno del quale, tra l'altro, deve anche salvare indirizzi, parola di stato e registri ogni volta che fai una chiamata a procedura.