COMPILADORES 07 Prof. Marcos.

Slides:



Advertisements
Apresentações semelhantes
Marco Antonio Montebello Júnior
Advertisements

Arquitetura e organização de computadores
Alocação Dinâmida de Memória
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Alocação Dinâmica de Memória
Políticas Curso de aprofundamento em linguagem C.
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Ponteiros em C.
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Linguagem C Strings.
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Fundamentos de Programação 1
Ling. C - Variáveis Uma variável não é mais do que o nome que nós damos a uma determinada posição de memória para conter um valor de um determinado tipo.
Escola Secundária c/ 3º CEB da Batalha
1MF. Vectores Tipo de dado usado para representar um CONJUNTO de dados do um mesmo tipo Estrutura de dados homogénea unidimensional Ex: Ler a nota de 3.
Listas Encadeadas.
Revisão da Linguagem C.
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Alocação Dinâmica de Memória Professor Mário Dantas
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Aula prática 6 Vetores e Matrizes
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Linguagem de Programação II Parte IX
Definição de Tipos Estruturas e Ponteiros
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Alocação Dinâmica de Memória
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Professor Mário Dantas
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Ambiente de Execução - Rotinas
Técnicas de Desenvolvimento de Programas
Algoritmos e Estruturas de Dados I – Ponteiros
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Sistemas Operacionais
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Capítulo VIII Ambientes de Execução
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída.
1 Alocação Dinâmica Quando se declara arrays o tamanho deve ser fixo e definido primeiramente –Alocação estática Pode-se alocar dinamicamente o espaço.
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Algoritmos e Estruturas de Dados
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Programação de Computadores I – Arquivos
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Programação de Computadores I – Ponteiros Profa. Mercedes Gonzales Márquez.
Leandro Almeida  As declarações abaixo alocam memória para diversas variáveis.  A alocação é estática, pois acontece antes que o programa.
Ponteiros em C Prof. Kariston Pereira
Linguaguem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Funções.
Linguagem de Programação
Programação em C Aula 9.
PCI- Vetores Profa. Mercedes Gonzales Márquez. Aula 5 - VetoresAlgoritmos e Estruturas de Dados I Sequência de valores todos do mesmo tipo Nome único.
ponteiros Estrutura de Dados Prof. André Cypriano M. Costa
Programação de Computadores I – Arquivos Profa. Mercedes Gonzales Márquez.
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Alocação Dinâmica de Memória e Tipo Abstrato de Dados Cristiano Arbex Valle Vinicius Fernandes dos Santos
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Fundamentos de Programação 1
Transcrição da apresentação:

COMPILADORES 07 Prof. Marcos

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).

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.

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.

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

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.

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.

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

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..

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 0000 0000 0000 0000 E3 0000 0000 E4 0000 1001 E5 ̊ En

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).

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:

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 */ ... }

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

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.

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).

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); }

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]); }

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; }

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 );