Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di fab333
    Registrato dal
    Nov 2010
    Messaggi
    15

    limiti di memoria allocabili

    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....

  2. #2

    Re: limiti di memoria allocabili

    Originariamente inviato da fab333
    Da cosa dipende la massima memoria allocabile in un programma in C
    In linea di massima, dalla disponibilità di spazio di indirizzi, memoria fisica e memoria virtuale.
    Io riesco ad allocare al max circa 3 Mb....
    Come la stai allocando? Sullo stack o sull'heap?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di fab333
    Registrato dal
    Nov 2010
    Messaggi
    15

    Re: Re: limiti di memoria allocabili

    Originariamente inviato da MItaly
    Come la stai allocando? Sullo stack o sull'heap?
    Non ne ho idea, io intendo allocare la memoria semplicemente nel dichiarare
    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.

  4. #4
    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.

  5. #5
    Utente di HTML.it L'avatar di fab333
    Registrato dal
    Nov 2010
    Messaggi
    15
    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?

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    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-."

  7. #7
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    A me invece se uso verso i 2mb inizia a crashare.
    Scusate l' ignoranza ma non si potrebbe allocare tutto sulla ram?

  8. #8
    Originariamente inviato da ramy89
    A me invece se uso verso i 2mb inizia a crashare.
    Come già detto cento volte, se stai allocando sullo stack (ossia tramite variabili locali) è normale.
    Scusate l' ignoranza ma non si potrebbe allocare tutto sulla ram?
    Sia lo stack che l'heap stanno nella RAM, la differenza sta in come vengono gestiti. Leggiti un po' delle risposte qui.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    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.

  10. #10
    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.
    Per diversi motivi:
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.