Question

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

Était-ce utile?

La solution

Un sans aucune lacune dans les adresses qu'elle occupe. Vous pouvez probablement penser à cela comme un « bloc », et penser à quelque chose avec un écart au milieu comme « deux blocs ».

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

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

Il ne ressemble pas à ceci:

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

Et ni ne ressemble à ceci:

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

Dans tous les cas, « ressemble » signifie « autant que les adresses visibles en C sont concernés ». Quelque chose pourrait être contigu dans l'espace d'adressage virtuel, mais pas contigus dans la RAM physique. Pour cette question, quelque chose pourrait être contigu dans l'espace d'adresses de RAM physique, mais pas vraiment à côté dans la RAM physique. La moitié pourrait être sur une puce de RAM ici, et l'autre moitié sur une autre puce de RAM là-bas. Mais le modèle de mémoire C ne peut pas « voir » tout cela.

Autres conseils

Ceci est un bloc de mémoire contigu de cinq octets, allant de l'emplacement à l'emplacement 1 5:

text alt

Il représente octets (de couleur bleu clair) qui sont en même temps dans la mémoire sans multiplets d'intervalle (blanc) entre eux.

Ceci est un ensemble non contigu de cinq octets d'intérêt:

text alt

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

Le bloc utilisé à l'emplacement 0 ainsi que tous les blocs suivants au-delà de l'emplacement 7 peut généralement être ignorée car ils font interposer entre les octets d'intérêt allant de 1 à 7 emplacements.

Un bloc de mémoire qui ne sont pas interrompus par une autre mémoire. Ou pour être plus précis, il faut un bloc ininterrompu de virtuel l'espace d'adressage. Le vrai soutien RAM que l'espace d'adressage n'a pas besoin d'être contigus.

Ceci est important si vous allouez un grand bloc de mémoire. Le système d'exploitation doit pour vous donner un bloc contigu, mais si la mémoire est si fragmenté que les morceaux que les petits sont libres alors cette allocation de mémoire ne peut être satisfaite même si la mémoire libre totale est plus grande que l'espace requis.

Ce n'est pas un gros problème sur les 64 applications de bit depuis l'espace d'adressage est grand là-bas. Mais dans 32 processus de bits, il peut arriver que le tas est tellement fragmenté (entre les blocs libérés il y a encore des blocs unfreed) que les allocations plus importantes échouent.

Réponse dans le contexte de l'allocation de mémoire, lorsque vous invoquez l'allocateur de mémoire et demande 24 octets de mémoire, il doit être en mesure de localiser un seul bloc d'au moins 24 octets de mémoire non allouée.

Si elle a 16 octets de mémoire à partir d'une adresse x et un autre 8 octets à partir d'une y adresse telle que y > x + 16 ou y < x - 8 (qui créerait un écart), l'allocateur ne peut pas répondre à votre demande de 24 octets, même bien qu'il y ait est un total de 24 octets libres.

Voir aussi Fragmentation.

un bloc de mémoire qui est accolée exactement quand elle est définie par un début et une adresse de fin à partir d'un seul espace d'adressage linéaire et n'a pas de trous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top