nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Re: gestione dinamica della memoria (algoritmo)

Von: Jack (jack4747@gmail.com) [Profil]
Datum: 10.07.2008 15:39
Message-ID: <12f48986-e9b0-4b9f-b319-a3e6c18a0ac4@2g2000hsn.googlegroups.com>
Newsgroup: it.comp.lang.c
On Jul 10, 3:06 pm, vittorio.beninte...@googlemail.com wrote:

> ma a questo punto la domanda è: "usando la funzione malloc, il SO
> (linux in particolare) restituisce un blocco fisico di memoria oppure
> un blocco di memoria virtuale?"

un blocco di memoria virtuale. O meglio: ogni applicazione in linux ha
uno spazio di memoria dedicato (contiguo, ad esempio dall'indirizzo
0x0000 all'indirizzo 0xFFFF). Questo spazio di memoria viene mappato
dal kernel nella memoria virtuale del sistema (in pagine di 4k credo,
le pagine non necessariamente sono contigue) . Le pagine di memoria
virtuale vengono mappate all'occorrenza nella RAM.

> mi spiego meglio...
>
> se ad esempio nella memoria fisica non esiste un blocco tanto grande,
> ma di per se in memoria lo spazio ci sarebbe (anche se frammentato),
> il sistema operativo consente comunque l'allocazione del blocco?

Si. Il programma non vede in nessun caso la frammentazione della
memoria fisica o virtuale(neanche la malloc, che chiede semplicemente
all'OS della memoria). Al limite vede la frammentazione dello spazio
di memoria dedicato (l'heap), ma non sono sicuro.
Credo ci sia un limite alla quantita' memoria che puoi allocare, prima
che il sistema ritorni un out of memory, ma sinceramente non so
quant'e'.
Ad esempio sono quasi certo che su un sistema a 32bit non si possono
allocare piu' di 4GB di ram (perche' finiscono gli indirizzi), anche
se probabilmente il limite e' piu' basso (normalemente una parte degli
indirizzi servono a mappare registri e periferiche HW e quindi non
possono essere usati dalla RAM.

Tutto questo e' AFAIK. Potrei sbagliarmi o non essere completamente
esatto su alcune cose. I dettagli inoltre dipendono dall'OS e anche
dall'HW.

Ciao Jack

[ Auf dieses Posting antworten ]