web-dev-qa-db-fra.com

Qu'est-ce qu'un bloc de mémoire contigu?

Tout comme dans le titre, qu'est-ce qu'un bloc de mémoire contigu?

38
565471741

Un sans lacunes dans les adresses qu'il occupe. Vous pouvez probablement penser à cela comme un "bloc", et penser à quelque chose avec un écart au milieu comme "deux blocs".

Le terme apparaît dans la définition d'un tableau comme étant "contigu". Cela signifie que les éléments sont disposés de bout en bout, sans discontinuités et sans remplissage entre eux (il peut y avoir un remplissage à l'intérieur de chaque élément, mais pas entre les éléments). Ainsi, un tableau de 5 éléments de 4 octets ressemble à ceci (1 caractère de soulignement par octet, les symboles | ne représentent pas la mémoire):

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

Cela ne ressemble pas à ceci:

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

Et cela ne ressemble pas à ça:

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

Dans tous les cas, "ressemble à" signifie "en ce qui concerne les adresses visibles en C". Quelque chose pourrait être contigu dans l'espace d'adressage virtuel, mais pas contigu dans la RAM physique. D'ailleurs, quelque chose pourrait être contigu dans l'espace d'adresse physique RAM, mais pas réellement adjacent dans la RAM physique. La moitié pourrait être sur un RAM chip over ici, et l'autre moitié sur une autre RAM puce là-bas. Mais le modèle de mémoire C ne peut pas "voir" tout cela.

49
Steve Jessop

Il s'agit d'un bloc de mémoire contigu de cinq octets, s'étendant de l'emplacement 1 à l'emplacement 5:

alt text

Il représente des octets (de couleur bleu clair) qui sont ensemble en mémoire sans espace d'octets (blanc) entre eux.

Il s'agit d'un ensemble non contigu de cinq octets d'intérêt:

alt text

Il est fragmenté en trois groupes d'octets (de couleur jaune) avec des octets d'intervalle aux emplacements 4 et 6. À partir de l'emplacement 1, il y a un bloc contigu de trois octets, s'étendant des emplacements 1 à 3. Il y a deux autres blocs d'un octet chacun aux emplacements 5 et 7, respectivement.

Le bloc inutilisé à l'emplacement 0 ainsi que tous les blocs suivants au-delà de l'emplacement 7 peuvent généralement être ignorés car ils s'interposent entre les octets d'intérêt s'étendant des emplacements 1 à 7.

56
Michael Goldshteyn

Un bloc de mémoire qui n'est pas interrompu par une autre mémoire. Ou pour être plus précis, cela nécessite un bloc ininterrompu d'espace d'adressage virtuel. Le véritable RAM sauvegarde de cet espace d'adressage n'a pas besoin d'être contigu.

Ceci est important si vous allouez un bloc de mémoire volumineux. Le système d'exploitation doit vous le donner sous forme de bloc contigu, mais si la mémoire est si fragmentée que seules les petites pièces sont libres, cette allocation de mémoire ne peut pas être satisfaite même si la mémoire libre totale est plus grande que l'espace demandé.

Ce n'est pas un gros problème sur les applications 64 bits car l'espace d'adressage y est important. Mais dans les processus 32 bits, il peut arriver que le tas soit si fragmenté (entre les blocs libérés, il y a encore des blocs non libérés) que des allocations plus importantes échouent.

5
CodesInChaos

Un bloc de mémoire est contigu exactement lorsqu'il est défini par une adresse de début et une adresse de fin à partir d'un espace d'adressage linéaire unique et n'a pas de trous.

2
Peter G.

Répondant dans le contexte de l'allocation de mémoire, lorsque vous appelez l'allocateur de mémoire et demandez 24 octets de mémoire, il doit être capable de localiser un seul bloc d'au moins 24 octets de mémoire non allouée.

S'il a 16 octets de mémoire commençant à une adresse x et 8 autres octets commençant à une adresse y tels que y > x + 16 ou y < x - 8 (cela créerait un écart), alors l'allocateur ne peut pas satisfaire votre demande de 24 octets même s'il y a un total de 24 octets libres.

Voir aussi Fragmentation .

2
Sinan Ünür

La mémoire se compose d'un grand nombre de blocs d'octets. Chaque bloc a sa propre adresse. Lorsqu'un processus demande de la mémoire, la mémoire est allouée de deux manières:

  1. Allocation de mémoire contiguë
  2. Allocation de mémoire non contiguë

Dans l'allocation de mémoire contiguë, des blocs consécutifs (les uns après les autres) sont affectés, appelés blocs de mémoire contigus.
Dans l'allocation de mémoire non contiguë, des blocs distincts présents à différents emplacements sont attribués.

0
Ramzan