2010-04-10 3 views

Répondre

0

Pas nécessairement, et habituellement non. Il peut y avoir différents mécanismes d'allocation.

Plusieurs vont stocker des métadonnées entre des blocs alloués, diviser des tas en fonction de la taille des objets et d'autres choses. Vous ne pouvez pas compter sur la continuité des pointeurs renvoyés.

4

Oui, l'allocation est pratiquement contiguë (si vous l'avez obtenu avec un appel malloc()). Il se peut qu'il ne soit pas physiquement contigu, mais du point de vue de l'application, vous ne vous en souciez généralement pas.

2

Cela dépend de ce que vous demandez exactement. Par exemple, supposons que vous avez ce code C:

char* a = malloc(100); 
char* b = malloc(100); 

a et b ont chacun des pointeurs 100 octets qui leur sont alloués. Cependant, vous ne pouvez pas supposer que les 100 octets alloués à b seront juste après les 100 octets alloués à a, ou vice versa, ou quoi que ce soit, en fait, sur leurs positions les uns par rapport aux autres. Donc, dans ce sens, non, ils ne sont pas contigus. Dans chaque bloc de 100 octets, cependant, ces 100 octets sont contigus du point de vue de votre programme.

C'est-à-dire, a[1] est un octet loin de a[0] et a[2].

2

Vous devez séparer le concept de mémoire virtuelle de celle de la mémoire physique . Alors que chaque bloc alloué (soit un objet unique, soit un tableau d'objets) a un espace virtuel contigu (à partir de l'adresse que votre allocateur de mémoire dynamique vous donne), il peut être divisé en mémoire réelle selon la façon dont le système d'exploitation sous-jacent gère la mémoire.

Bien sûr, si la mémoire virtuelle est pas présent qu'ils correspondent, sinon il est contigu au programme qui l'utilise, mais pas dans la configuration physique de la mémoire ..