2008-11-25 7 views
6

J'essaie de comprendre le processus de déclaration et d'affectation d'un type primitif à l'arrière.Une primitive est-elle affectée à une adresse mémoire?

  1. int i;
  2. i = 3;

Pour 1), sur la pile de la mémoire, il attribue un espace pour le stockage d'une valeur de type int nommé i pour 2), il affecte la valeur 3 à la espace préservé ci-dessus

Y a-t-il une adresse mémoire là-bas? D'après mon impression, l'adresse mémoire est toujours associée aux objets sur le tas?

Mise à jour:

En ce qui concerne les réponses:

Ainsi, pour chaque variable sur la pile, ils sont tous attribué une adresse mémoire et comme les objets sur le tas. Ai-je raison?

Mais pour Java, ce n'est pas le cas?

Répondre

1

En supposant que vous parlez de C ou C++ (je ne peux pas dire), oui. Vous pouvez accéder à l'adresse comme suit:

int i = 3; 

int *k = &i; // k now is a pointer to i 

*k = 4; // assigns the value k points to (i) to 4, i is now 4 
0

Comment les dépassements de tampon de pile se produisent-ils autrement? :) quelqu'un doit écrire à un pointeur vers la pile.

5

Il n'y a pas toujours d'adresses impliquées. Le compilateur peut mettre des variables dans des registres s'il trouve que leur adresse n'est jamais prise par le programmeur. Vous n'avez donc pas besoin d'accéder à la mémoire principale. Par exemple, dans votre code ci-dessus, ce que le compilateur pourrait générer pourrait être aussi simple que

add $2, $0, 3 

pour mettre la valeur 3 dans le registre 2. Dès que vous créez un pointeur et le faire pointer à cette variable, vous avez une adresse, en fait. Et puis la variable ne peut plus être dans un registre seulement.

0

Vraiment la pile est une zone spéciale de la mémoire virtuelle de traitement, donc tout dans la pile a des ajouts de mémoire. Tête de la pile détenue par le registre ESP (SP) (architecture x86). Empilez les adresses habituellement plus bas que les adresses de mémoire, parce que la pile se situe plus près du début de la mémoire vitruelle de traitement que du tas.

Questions connexes