Pergunta

Suponha que temos essas variáveis locais:

int a = 0;
int b = 1;
int c = 2;
int d = 3;

Tanto quanto eu sei, estas serão alocadas na pilha do sistema, como este:

|   |
| 3 | d
| 2 | c
| 1 | b
|_0_| a

Isso significa que, para obter o valor de a, os valores de d, c e b deve ser, primeiro, saiu da pilha?Se assim for, onde esses valores vão?Isso significa que o acesso mais recentemente variáveis declaradas vai ser mais rápido?Ou eu estou faltando alguma coisa (que eu suspeito que é o caso), e a coisa toda funciona, de alguma outra forma?

EDITAR: obrigado, pessoal!

Foi útil?

Solução

As variáveis locais na pilha são normalmente acessadas em relação ao chamado ponteiro do quadro, que aponta no início de seu quadro de pilha.Também seria possível fazer isso em relação ao ponteiro de pilha, mas desde que este se move durante a avaliação de expressões, é mais difícil manter o controle de.

Na prática, tais variáveis podem também ser mantidos nos registradores do processador.

Outras dicas

Ou eu estou faltando alguma coisa

Você está em falta que a pilha reside na memória regular, que permite acesso aleatório - é só adicionar o adequado deslocamento para o quadro de ponteiro (a parte inferior do 'local' pilha) e obter um ponteiro para a célula de memória mantendo o valor.

Isso significa que, para obter o valor de a, os valores de d, c e b deve ser, primeiro, saiu da pilha?

O código emitido simplesmente move o o ponteiro de pilha o número de bytes correcto ao inserir a função.Ele move-lo de volta a mesma distância ao deixar a função.Assim, ele não saltam as variáveis individualmente.Supondo que um inteiro de 4 bytes, o exemplo que você deu iria mover o ponteiro de pilha de 16 bytes.Ele realmente se move mais do que isso, porque de outra informação no quadro de pilha, tais como o endereço de retorno.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top