Pregunta

Al igual que en el título, lo que es un bloque de memoria contigua?

¿Fue útil?

Solución

Uno sin huecos en las direcciones que ocupa. Probablemente puede pensar en esto como un "bloque", y pensar en algo con un hueco en el medio como "dos bloques".

El término aparece en la definición de una matriz como "contiguo". Eso significa que se colocan los elementos a cabo de extremo a extremo, sin discontinuidades y sin relleno entre ellos (puede haber acolchado dentro de cada elemento, pero no entre los elementos). Por lo que un arreglo de 5 elementos de 4 bytes se parece a esto (1 carácter subrayado por byte, los símbolos | no representan la memoria):

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

No se ve así:

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

Y ni qué se parece esto:

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

En todos los casos, "se parece a" medios "en cuanto a las direcciones visibles en C se refiere". Algo podría ser contiguos en el espacio de direcciones virtuales, pero no contiguas en la memoria RAM física. Por lo demás, algo que podría ser contiguos en el espacio físico de direcciones de memoria RAM, pero en realidad no adyacentes en la memoria RAM física. La mitad de los que podría estar en un chip de memoria RAM por aquí, y la otra mitad en otro chip de memoria RAM por allí. Pero el modelo de memoria C no puede "ver" nada de eso.

Otros consejos

Este es un bloque de memoria contigua de cinco bytes, que abarca desde la posición 1 a la posición 5:

text alt

Representa bytes (azul claro a color) que están juntos en la memoria sin bytes gap (blanco) entre ellos.

Este es un conjunto no contiguo de cinco bytes de interés:

text alt

Se fragmentó en tres grupos de bytes (de color amarillo) con brecha bytes en lugares 4 y 6. empieza en la ubicación 1 hay un bloque contiguo de tres bytes, que abarca desde ubicaciones 1 a 3. Hay dos bloques de más de un byte cada uno en lugares 5 y 7, respectivamente.

El bloque no utilizado en la ubicación 0, así como los bloques posteriores más allá de ubicación 7 por lo general puede ser ignorada ya que hacen interponer entre los bytes de interés que abarca desde las ubicaciones 1 a 7.

un bloque de memoria que no está interrumpida por otra memoria. O para ser más precisos que requiere un bloque ininterrumpido de espacio de direcciones virtuales. El respaldo real RAM que el espacio de direcciones no tiene por qué ser contiguos.

Esto es importante si asigna un bloque de memoria de gran tamaño. El sistema operativo tiene que darle a usted como un bloque contiguo, pero si la memoria no está tan fragmentado que las piezas solamente pequeños son libres entonces esta asignación de memoria no puede ser satisfecha, incluso si la memoria libre total es mayor que el espacio requerido.

Esto no es un problema tan grande en las aplicaciones de 64 bits ya que el espacio de direcciones es grande allí. Sin embargo, en los procesos de 32 bits puede ocurrir que el montón se pone tan fragmentado (entre bloques liberados todavía hay bloques unfreed) que las asignaciones más grandes fallan.

Contestación en el contexto de la asignación de memoria, cuando se invoca el asignador de memoria y solicitud de 24 bytes de memoria, debe ser capaz de localizar un solo bloque de al menos 24 bytes de memoria no asignada.

Si tiene 16 bytes de memoria que comienza en un x dirección y otros 8 bytes que comienzan en un y dirección tal que y > x + 16 o y < x - 8 (que crearía un vacío), entonces el asignador no pueden satisfacer su solicitud de 24 bytes, aunque hay es un total de 24 bytes libres.

fragmentación .

A bloque de memoria es contiguo exactamente cuando se define por un inicio y una dirección final de un único espacio de direcciones lineal y no tiene agujeros.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top