2013-04-27 2 views
0

J'apprends la base du langage d'assemblage en utilisant MIPS et le simulateur MARS. Le titre contient ma question, mais je vais essayer de l'étendre avec un exemple. Supposons que nous voulions lire une chaîne à partir du clavier (200 caractères maximum). Nous devons façons de procéderLes chaînes de l'entrée, où ils devraient être stockés, les données dynamiques ou statiques?

1) Nous allouons 201 octets sur le segment de données statiques, faire l'appel système pour lire la chaîne, puis reportez-vous à par adresse « string »

.data 
string:  .space 201 

.text 
li $v0, 8 
la $a0, string 
li $a1, 201 
syscall 

2) Nous requête par la fonction sbrk (la seule disponible sur MARS) 201 octets consécutifs sur le tas, puis nous les remplissons avec la chaîne d'entrée.

li $v0, 9 
la $a0, 201 
syscall 
move $s0, $v0 

li $v0, 8 
move $a0, $s0 
li $a1, 201 
syscall 

Quels sont les avantages et les inconvénients des deux méthodes? J'ai toujours vu dans les exemples MIPS la première méthode, mais je ne peux pas comprendre que la seconde ne soit pas utilisée.

Merci d'avance :)

+0

Les exemples n'utilisent pas la seconde méthode simplement pour garder l'exemple simple. Un vrai programme peut utiliser l'une ou l'autre méthode. – markgz

Répondre

1

La première méthode est bien dans un programme simple qui a juste besoin d'un nombre fixe (petit) de tampons. Et il n'y a pas besoin de libérer la mémoire, ce qui le rend plus simple pour un débutant.

La méthode d'allocation dynamique offre une plus grande flexibilité sur l'utilisation de la mémoire de votre processus.
Par exemple, vous pouvez avoir un tampon dont vous n'avez besoin que temporairement, et comme la mémoire est une ressource finie, vous pouvez allouer dynamiquement cette mémoire pour la libérer lorsque vous n'en avez plus besoin - plutôt que d'avoir une mémoire allouée statiquement restera alloué pour toute la durée de vie de votre processus.
Il est également possible que vous ne sachiez pas exactement de combien de mémoire vous aurez besoin au moment de la compilation, car cela peut dépendre, par exemple, de la quantité de mémoire dont vous aurez besoin. sur certaines entrées de l'utilisateur. C'est un autre scénario lorsque l'allocation de mémoire dynamique est utile. L'inconvénient de l'allocation dynamique de la mémoire est que vous (le programmeur) devez garder une trace de toutes vos allocations. C'est-à-dire, vous devez vous assurer que vous libérez la mémoire que vous avez allouée à un moment donné, mais vous devez également vous assurer que votre programme est fait avec cette mémoire avant de le libérer (ou vous pourriez vous retrouver avec pointeurs pendants).

Questions connexes