A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

COMPILADORES 07 Prof. Marcos.

Apresentações semelhantes


Apresentação em tema: "COMPILADORES 07 Prof. Marcos."— Transcrição da apresentação:

1 COMPILADORES 07 Prof. Marcos

2 AMBIENTES EM TEMPO DE EXECUÇÃO
Execuçao Antes da geração de código, deve ser relacionado o texto-fonte do programa com as ações que precisam ocorrer em tempo de execução. Ocorre um relacionamento entre os nomes no texto fonte e os objetos de dados na máquina (Utilização da tabela de Símbolos).

3 AMBIENTES EM TEMPO DE EXECUÇÃO
Execuçao A alocação e liberação dos objetos de dados são gerenciados pelos pacotes de suporte em tempo de execução. A representação de um objeto de dados, em tempo de execução, é determinada pelo seu tipo.

4 AMBIENTES EM TEMPO DE EXECUÇÃO
Execuçao Normalmente tipos de dados elementares (char, int float double) podem ser representados porr objetos de dados equivalentes, mas, agregados de dados (arrays, Strings, estruturas) são representados por coleções de objetos de dados.

5 AMBIENTES EM TEMPO DE EXECUÇÃO
Execuçao Um bloco de memória é disponibilizado para a execução do programa-alvo. Essa memória é dividida em: Código Objeto de dados Pilha de Controle Código Dados Pilha Livre Heap

6 AMBIENTES EM TEMPO DE EXECUÇÃO
Execuçao Quando ocorre uma chamada, a execução é interrompida e as informações sobre o estado da máquina, tais como os valores do apontador da próxima instrução e dos registradores de máquina são salvos na pilha. Quando o controle retorna, da chamada, os registradores são recompostos e o apontador da próxima instrução fica apontando para a instrução após aquela que efetuou a chamada.

7 AMBIENTES EM TEMPO DE EXECUÇÃO
Execuçao Uma área chamada heap abriga todas as outras informações do programa. Tanto a pilha quanto o heap mudam de tamanho durante a execução. As linguagens baseadas em C necessitam da pilha e do heap, mas nem todas as linguagens usam os dois.

8 AMBIENTES EM TEMPO DE EXECUÇÃO
Execuçao Para a execução de um procedimento cria-se um bloco contíguo na memória chamado de registro de ativação com: Valor Retornado Parâmetros Atuais Controle - Opcional Acesso - Opcional Estado do SO salvo Dados Locais Prof. Marcos Antonio Dados Temporários

9 AMBIENTES EM TEMPO DE EXECUÇÃO
Execuçao Dados Temporários: resultados de expressões. Dados Locais: P/ a execução do procedimento. Estado do SO: Estado antes da chamada. Acesso: LP que os dados locais não são fixos. Controle: Aponta o Reg. de Ativação Chamador. Parâmetros: Passados pelo chamador. Valor Retornado: Valor ao chamador..

10 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória Endereço Memória Por exemplo: int x = 9. Cada posição de memória corresponde apenas a um byte e uma variável inteira ocupa, geralmente, 4 bytes. Assim, o número 9 vai estar representado em 4 posições de memória (ex: E2, E3, E4 e E5). E0 E1 E2 E3 E4 E5 ̊ En

11 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória Representação de ARRAYs Ao declarar um array y de 10 inteiros, o compilador vai reservar um bloco de memória consecutivo que permita guardar esses 10 inteiros. Como um inteiro ocupa 4 bytes, o compilador terá de reservar um bloco de 40 bytes (por exemplo do endereço E100 até o endereço E139).

12 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória Em arrays com quantidades fixas de elementos, tem o problema de não se saber quantos iremos serão utilizadis, então uma estratégia é: declarar os arrays com uma dimensão máxima. Por exemplo: Um programa para ordenar uma lista de n números, em que n seria um número a ser introduzido pelo usuário, teria que fazer algo parecido com:

13 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória #include <stdio.h> #define N 10000 int main() { int y[N]; int n; printf("Quantos números quer ordenar? "); scanf("%d", &n); if( n > N ) printf(“ERRO: O tamanho máximo do array é %d\n", N); else /* código para introduzir e ordenar o array de n números */ ... }

14 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória DESVANTAGEM Criamos um array de inteiros e se utilizarmos somente 10 ou 20 ou 100 ? Esta solução tem a desvantagem de desperdiçar memória.

15 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória Uma alternativa é requisitar a memória durante a própria execução do programa. Se o usuário digitar 10, solicitamos um bloco de memória que permita guardar 10 inteiros. Deste modo, o array ocupa apenas o espaço que é estritamente necessário.

16 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória a biblioteca stdlib.h existe uma função chamada malloc que permite requisitar, em tempo de execução, n bytes de memória (malloc é uma abreviatura de memory alocation).

17 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória #include <stdio.h> #include <stdlib.h> int main() { int *y; int i, k, m, min, temp, n; printf("Quantos números quer ordenar? "); scanf("%d", &n); y = (int *) malloc( n * sizeof(int) ); if( y == NULL ) { printf("ERRO: nao ha memoria.\n"); exit(1); }

18 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória /* Receber os valores a ordenar */ for (i=0; i<n; i++) { printf("%d.º numero -> ", i+1); scanf("%d",&y[i]); }

19 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória /* Ordenar o array */ for( k=0; k<=n-1; k++ ) { /* o índice do menor em y[k], y[k+1], ..., y[n-1] */ min = y[k]; m = k; for( i=k; i<=n-1; i++ ) if( y[i] < min ) min = y[i]; m = i; }

20 AMBIENTES EM TEMPO DE EXECUÇÃO
Memória /* troca a[k] com a[m] */ temp = y[k]; y[k] = y[m]; y[m] = temp; } /* Mostrar os elementos do array ordenados */ for( i=0; i<n; i++ ) printf("%d ", y[i]); printf("\n"); /* libertar a memória */ free( y );


Carregar ppt "COMPILADORES 07 Prof. Marcos."

Apresentações semelhantes


Anúncios Google