1 / 23

Organização do Ambiente de Execução (Runtime system)

Organização do Ambiente de Execução (Runtime system). Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos. Interesse Prático. Todo programador deve ter uma idéia básica dos aspectos de eficiência de várias construções da linguagem.

Download Presentation

Organização do Ambiente de Execução (Runtime system)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Organização do Ambiente de Execução (Runtime system) • Representação de dados • Avaliação de expressões • Alocação de memória • Rotinas • Objetos e métodos

  2. Interesse Prático • Todo programador deve ter uma idéia básica dos aspectos de eficiência de várias construções da linguagem. • Exemplo: escolha de estruturas de dados

  3. Representação de Dados • Booleanos, Inteiros, Caracteres, Registros, Arrays etc. • Bits, bytes, words, double words. • Gap semântico.

  4. Princípios Básicos • Não confusão: valores diferentes de um tipo devem ter representações diferentes. • Unicidade: cada valor (de um determinado tipo) deveria ter a mesma representação.

  5. Questões Pragmáticas • Representação em tamanho constante • Representação direta ou indireta

  6. Representação de tipos primitivos • Booleanos • Caracteres • Inteiros

  7. Representação de Registros type Data = record y:Integer, m: Integer, d: Integer end; type Details = record female: Boolean, dob: Date, status: Char end; var today: Date; var her: Details;

  8. Representação de união disjunta • Tag e parte variante • Valor do tag determina o tipo da parte variante • Representação matemática: T = T1 + … + Tn • Operações: teste do tag e projeção da parte variante

  9. Representação de união disjunta • Exemplos: registros variantes em Pascal e Ada, datatypes em Haskell e ML • type Number = record case acc: Boolean of true: (i: Integer); false: (r: Real) end;

  10. Representação de Arrays • Arrays estáticos • Arrays dinâmicos

  11. Representação de tipos recursivos type IntList = ^IntNode; type IntNode = record head: Integer; tail: IntList; end; var primes: IntList;

  12. Avaliação de expressões • (a * b) + (1 – (c * 2)) • LOAD R1 aMULT R1 bLOAD R2 #1LOAD R3 cMULT R3 #2SUB R2 R3ADD R1 R2

  13. Avaliação de expressões • (a * b) + (1 – (c * 2)) • LOAD aLOAD bMULTLOADL 1LOAD cLOADL 2MULTSUBADD

  14. Avaliação de expressões • (0 < n) /\ odd(n) • LOADL 0LOAD nLTLOAD nCALL oddAND

  15. Organização do Armazenamento • Estática • Dinâmica (pilha e heap)

  16. Alocação estática • endereços são conhecidos em tempo de compilação, possibilitando acesso mais eficiente. • Valores “persistem” entre chamadas diferentes a procedimentos (se usada para procedimentos).

  17. Alocação estática - limitações • tamanho dos objetos tem que ser conhecido em tempo de compilação. • Procedimentos recursivos não são permitidos. • Estruturas de dados não podem ser criadas dinâmicamente.

  18. Organização do Armazenamento - pilha • Uso da pilha para armazenar variáveis locais • A pilha também para armazenar o estado do programa quando da chamada de procedimentos: valores de registradores, contador do programa etc.

  19. Registros de Ativação ou frame • empilhado no início da execução de um procedimento e desempilhado ao final.

  20. Alocação na pilha • baseada em uma pilha de controle, com registros de ativação sendo empilhados e desempilhados. • Armazenamento de variáveis locais na pilha (no registro de ativação da chamada). • Valores locais são removidos (perdidos) ao final da ativação (tempo de vida)

  21. Alocação na Pilha • Tempo de vida aninhado (variáveis locais) • Frames: um frame para cada procedimento ativo • Registradores: StackBase, LocalBase, StackTop • Link data: return address e dynamic link

  22. Alocação na heap • necessária quando valores de nomes locais devem ser mantidos após o fim da ativação, ou • se uma ativação deve sobreviver ao procedimento chamador. • Gerenciamento da heap pode ser feito de várias maneiras (automático ou controlado pelo programador).

  23. Pilha x Heap • Como o tamanho desses estruturas cresce e diminui dinamicamente, normalmente elas são estruturadas de forma a uma crescer em direção à outra.

More Related