Domanda

Proprio come nel titolo, che cosa è un blocco di memoria contigua?

È stato utile?

Soluzione

Uno senza eventuali lacune negli indirizzi che occupa. Si può probabilmente solo pensare a questo come un "blocco", e pensare a qualcosa con un buco nel mezzo, come "due blocchi".

Il termine deriva nella definizione di una matrice come "contigue". Che i mezzi gli elementi sono disposti end-to-end, senza discontinuità e senza imbottitura fra loro (ci possono essere imbottitura all'interno di ogni elemento, ma non tra gli elementi). Quindi, una serie di 5 a 4 byte elementi si presenta così (personaggio 1 sottolineatura per byte, il | simboli non rappresentano la memoria):

 ____ ____ ____ ____ ____
|____|____|____|____|____|

Non sembra in questo modo:

 ____ _ ____ _ ____ _ ____ _ ____
|____|_|____|_|____|_|____|_|____|

E non vi sembra questo:

 ____ ____ ____                                           ____ ____
|____|____|____| ... somewhere completely different ...  |____|____|

In tutti i casi, "assomiglia" significa "per quanto gli indirizzi visibili in C sono interessati". Qualcosa potrebbe essere contigui nello spazio di indirizzamento virtuale, ma non contigui nella RAM fisica. Del resto, qualcosa potrebbe essere contigui nello spazio fisico indirizzo di RAM, ma in realtà non adiacenti in RAM fisica. La metà di esso potrebbe essere su un chip di RAM qui, e l'altra metà su un altro chip RAM là. Ma il modello di memoria C non può "vedere" nulla di tutto ciò.

Altri suggerimenti

Questo è un blocco di memoria contiguo di cinque byte, si estende dalla posizione 1 alla posizione 5:

alt text

Rappresenta byte (azzurro colorato) che sono insieme in memoria senza byte gap (bianco) tra loro.

Questo è un insieme non contiguo di cinque byte di interesse:

alt text

Si è frammentato in tre gruppi di byte (colore giallo) con gap byte in posizioni 4 e 6. Partendo posizione 1 è un blocco contiguo di tre byte, che va dal posizioni 1 a 3. Ci sono altri due blocchi un byte ogni in posizioni 5 e 7, rispettivamente.

Il blocco inutilizzato nel punto 0, nonché eventuali blocchi successivi di là posizione 7 può solitamente essere ignorato in quanto fanno interpose tra i byte di interesse si estende dalle posizioni da 1 a 7.

Un blocco di memoria che non è interrotto da un'altra memoria. O per essere più precisi richiede un blocco ininterrotto di indirizzo-spazio virtuale. Il vero supporto RAM quello spazio di indirizzi non ha bisogno di essere contigui.

Questo è importante se si assegna un grande blocco di memoria. Il sistema operativo deve dare a voi come un blocco contiguo, ma se la memoria è così frammentato che i pezzi solo piccoli sono liberi allora questo allocazione di memoria non può essere soddisfatta anche se la memoria libera totale è maggiore dello spazio richiesto.

Questo non è un grosso problema su applicazioni a 64 bit dal momento che lo spazio degli indirizzi è grande lì. Ma in 32 processi bit può succedere che il cumulo viene così frammentato (tra i blocchi liberati ci sono ancora blocchi unfreed) che gli stanziamenti più grandi sicuro.

Rispondere nel contesto di allocazione di memoria, quando si richiama l'allocatore di memoria e richiesta 24 byte di memoria, deve essere in grado di individuare un unico blocco di almeno 24 byte di memoria allocata.

Se ha 16 byte di memoria a partire da uno x indirizzo e altri 8 byte da un y indirizzo tale che y > x + 16 o y < x - 8 (che creerebbe una lacuna), allora l'allocatore non può soddisfare la richiesta di 24 byte anche se vi complessivamente 24 byte liberi.

Si veda anche frammentazione .

Un blocco di memoria è contiguo esattamente quando è definito da un inizio e un indirizzo finale da un singolo spazio di indirizzamento lineare e non presenta fori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top