Skip to content

Latest commit

 

History

History
328 lines (264 loc) · 6.65 KB

estocagem.org

File metadata and controls

328 lines (264 loc) · 6.65 KB

Vinculação de Estocagem

1 Memória, do binário até a execução (1)

./code-data-stack-heap-1.png

2 Memória, do binário até a execução (2)

./code-data-stack-heap-2.png

3 Memória, do binário até a execução (3)

./code-data-stack-heap-3.png

4 Memória, do binário até a execução (4)

./code-data-stack-heap-4.png

5 Memória, do binário até a execução (5)

./code-data-stack-heap-5.png

6 Memória, do binário até a execução (6)

./code-data-stack-heap-6.png

7 Memória, do binário até a execução (7)

./code-data-stack-heap-7.png

8 Memória, do binário até a execução (8)

./code-data-stack-heap-8.png

9 Vinculação de Estocagem

Associando uma variável a um espaço de memória

Tempo de Vida de uma variável (período do vínculo)

Tipos

  • Estática
  • Dinâmica
    • Pilha (stack)
    • Monte (heap)
      • Explícitas
      • Implícitas

10 Estática

Vinculação é feita antes do tempo de execução (segmento de dados)

Se mantém do início ao fim, e não muda

\pause Vantanges

  • Endereçamento direto, Alocação única
  • \pause Subprogramas sensíveis ao histórico
    int conta ()
    {
       static int meu_contador = 0;
       meu_contador += 1;
       return meu_contador;
    }
        

\pause Desvantagens

  • Falta de flexibilidade (se houver somente estática)
  • Recursão é impossível
  • Compartilhamento

11 Estática (Exemplos)

11.1 Texto

Globais, Locais com static,

atributos estáticos de classe

gcc -c exemplo1.c

nm exemplo1.o

Notem as duas variáveis x1 em BSS

Notem que y é um símbolo comum

11.2 Figura

./code-data-stack-heap-8.png

12 Dinâmica na Pilha

Vinculação é feita em tempo de execução na pilha

(variáveis automáticas)

\pause

int fib (n) {
  int n1 = n - 1;
  int n2 = n - 2;
  switch (n){
    case 0: return 1;
    case 1: return 1;
    default: return fib(n1) + fib(n2);
  }
}

\pause Cada instância de fib tem um frame na pilha

  • n1 e n2 são alocados nela
  • Vínculo existe durante a execução de fib(n)
    Quando retorna, o frame é desalocado, vínculo desfeito

Vantagens

  • Flexibilidade (recursão já é possível)
  • Segurança

Desvantagens

  • Endereçamento relativo, mas calculado em tempo de compilação.
  • Alocação a cada execução do bloco

13 Dinâmica na Pilha (Exemplos)

13.1 Texto

Parâmetros e Variáveis Locais (não static)

gcc -g -O0 -rdynamic exemplo1.c

Observar registros de ativação

gdb ./a.out # (info frame)

13.2 Figura

./code-data-stack-heap-8.png

14 Dinâmica no Monte

Vinculação é feita em tempo de execução no monte

Explícita (programador)

int *p = malloc (sizeof(int));
*p = 3;
free(p);
PajeSimulator *simulator = [[PajeSimulator alloc] init];
[simulator release];
QBoxLayout *topLayout = new QBoxLayout ();
delete topLayout;

Implícita (linguagem)

highs = [20, 23, 18, 15, 30];

15 Dinâmica no Monte (Exemplos)

15.1 Texto

Referências e Ponteiros

$ gcc -g -O0 -rdynamic exemplo3.c
$ valgrind ./a.out

Quando Implícitas (custo escondido)

  • Vetores dinâmicos em Algol
  • Linguagens de script interpretadas
  • Linguagens Funcionais e Lógicas

15.2 Figura

./code-data-stack-heap-8.png

16 Tempo de vida de uma variável

16.1 Texto

  • Estática
  • Dinâmica
    • Pilha
    • Monte
      • Explícitas
      • Implícitas

16.2 Figura

./code-data-stack-heap-8.png