Question

Je voudrais maintenant comment ces instructions allouent la mémoire.

Par exemple si je suis arrivé code:

x = new int[5]; 
y = new int[5];

Si ceux-ci sont attribués comment il ressemble réellement dans la RAM? Est bloc entier réservé à chacune des variables ou bloc (page de mémoire ou comment-vous-call-it - 4Ko de la taille sur 32 bits)? Est partagée pour 2 variables

Je ne pouvais pas trouver réponse à ma question dans un manuel. Merci pour toutes les réponses.

J'ai trouvé sur wikipedia: la fragmentation interne des pages Il est rare que les processus nécessitent l'utilisation d'un nombre exact de pages. En conséquence, la dernière page sera probablement que partiellement plein, perdre une certaine quantité de mémoire. AGRANDIR Les tailles augmentent clairement le potentiel de la mémoire perdue de cette façon, comme potentiellement plus parties de la mémoire non utilisées sont chargées dans la mémoire principale. formats de page plus petites assurent une meilleure adéquation de la quantité réelle de mémoire requise dans une allocation. À titre d'exemple, supposons que la taille de la page est 1024Ko. Si un processus Alloue 1025KB, deux pages doivent être utilisées, ce qui 1023KB d'espace inutilisé (où une page consomme entièrement 1024Ko et l'autre seulement 1 Ko).

Et ce fut réponse à ma question. Quoi qu'il en soit merci les gars.

Était-ce utile?

La solution

Une mise en œuvre du programme d'allocation typique d'abord appeler le système d'exploitation pour obtenir énorme bloc de mémoire, puis pour satisfaire votre demande, il vous donnera un morceau de cette mémoire, ce qui est connu comme sous-allocation . Si elle est à court de mémoire, il obtiendra plus du système d'exploitation.

Le allocateur doit garder une trace des deux tous les grands blocs, il ai obtenu du système d'exploitation ainsi que tous les petits blocs il remis à ses clients. Il doit également accepter des blocs de retour de clients.

Un algorithme de sous-allocation typique conserve une liste des blocs renvoyés de chaque taille appelée freelist et essaie toujours de répondre à une demande de la freelist, ne va au bloc principal si le freelist est vide. Cette technique particulière de mise en œuvre est extrêmement rapide et très efficace pour les programmes en moyenne, mais il a des propriétés de fragmentation lamentables si la taille de demande sont partout (ce qui est habituel pour la plupart des programmes).

allocataires modernes comme la mise en œuvre de malloc de GNU sont complexes, mais ont été construits avec des dizaines d'années d'expérience et sont à considérer si bien qu'il est très rare que le besoin d'écrire votre propre suballocator spécialisé.

Autres conseils

Vous ne trouvez pas dans le manuel, car il n'est pas spécifié par la norme. C'est, la plupart du temps x et y seront côte à côte (aller de l'avant et cout<< hex << leurs adresses).

Mais rien dans les forces standards cela pour que vous ne pouvez pas compter sur elle.

Chaque processus dispose de différents segments associés qui sont répartis entre l'espace d'adressage du processus: 1) Le segment de texte :: Où votre code est placé 2) Segment Stack :: pile de processus Segment de données 3) :: C'est là mémoire par « nouveau » est réservé. En outre, il stockent également initialisé et les données statiques initialisés (bs etc).

Alors, chaque fois que vous appelez une nouvelle fonction (qui je suppose que les utilisations malloc en interne, mais la nouvelle classe rend beaucoup plus sûr pour gérer la mémoire), il attribue le nombre d'octets dans le segment de données. Ofcourse l'adresse de l'impression lors de l'exécution du programme est virtuel et doit être traduit address..but physique qui ne nous appartient pas mal de tête et l'unité de gestion mémoire OS est-ce que pour nous.

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