Fundamentos de Programação

Documentos relacionados
Fundamentos de Programação

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Ponteiros em C. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1

Fundamentos de Programação

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Estrutura de dados 1. Ponteiros

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros

3. Linguagem de Programação C

Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

Tipos Abstratos de Dados. Estrutura de Dados

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Módulo 5 Vetores e Alocação Dinâmica

Fundamentos de Programação

Computação 2. Aula 7. Profª. Fabiany Ponteiros

Ponteiros e Alocação de Memória

- Mapa de memória de um processo - Ponteiros

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Ponteiros. Introdução

Curso de Programação C em Ambientes Linux Aula 04

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Ponteiros. Introdução e Alocação Dinâmica

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Princípios de Desenvolvimento de Algoritmos MAC122

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Aula 17: Ponteiros e Alocação Dinâmica em C

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.

Alocação Dinâmica em C

Programação de Computadores II. Cap. 5 Alocação Dinâmica

ESTRUTURA DE DADOS (TCC )

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Estrutura de Dados. Aula 07 Alocação Dinâmica

ponteiros INF Programação I Prof. Roberto Azevedo

Fundamentos de Programação

Ponteiros. Baseado nos slides do Prof. Mauro.

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Fundamentos de Programação 2

1/34 GESTÃO DINÂMICA DE MEMÓRIA

Linguagem C Apontadores. Endereços e apontadores Passagem de parâmetros para funções Apontadores e vectores Memória dinâmica

Modulo 12: alocação dinâmica de memória

Fundamentos de Programação

11a. Aula Ponteiros e Vetores

Reinaldo Gomes Alocação Dinâmica

Fundamentos de Sistemas Operacionais

Alocação Dinâmica. Introdução à Computação

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Fundamentos de Programação

10 a Aula - Operadores de Molde ( Casting ). Atribuição de Memória. Ponteiros. Enumerados. Mestrado em Engenharia Física Tecnológica

Aula 24 Ponteiros, vetores e structs

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Programação Estruturada Prof. Rodrigo Hausen Ponteiros e Passagem de Parâmetros

Fundamentos de Programação

O que é uma variável?

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

PLANO DE UNIDADE DIDÁTICA- PUD

Compiladores Ambiente de Execução

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

Matrizes. Estruturas de Dados Aula 5: Matrizes. Vetor declaração estática. Vetor declaração dinâmica

Estruturas de Dados Aula 5: Matrizes 23/03/2011

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Estruturas de Dados Aula 5: Matrizes

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Introdução. Ponteiros

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Programação Orientada a Objetos para Redes de Computadores. Arrays. Arrays

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Fundamentos de Programação

Arranjos. David Déharbe

Aula 25: Alocação Dinâmica

MCTA028 Programação Estruturada Aula 09: - Ponteiros (parte 2)

Ponteiros. Ponteiros. Ponteiros. Ponteiros. Ponteiros. Introdução a Programação. Profa. Roseli Romero

BCC202 - Estrutura de Dados I

Estruturas Dinâmicas - Ponteiros

Aula 07: - Mapa de memória de um processo - Ponteiros (parte 1)

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Implementação da programação modular II

Linguagens de Programação Aula 11

USP-ICMC-BInfo. Ponteiros em C. SCC501 - ICC-II 2011 Prof. João Luís

Alocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger

Aula 25: Alocação Dinâmica

Programação Imperativa. Lição n.º 16 A pilha de execução

Aula 24: Ponteiros e Alocação Dinâmica

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

Ponteiros. prof. Fabrício Olivetti de França

Arrays em Java. Prof. Renato Pimentel. GGI030 Programação Orientada a Objetos. Universidade Federal de Uberlândia Faculdade de Computação

Laboratório de Programação II

INF 1007 Programação II

Implementação de subprogramas

Conceitos de Linguagens de Programação

Transcrição:

Fundamentos de Programação CP41F Aula 12 Prof. Daniel Cavalcanti Jeronymo Layout de memória. Ponteiros: conceito, operadores de referência e dereferência, operações, aritmética e indireção múltipla Universidade Tecnológica Federal do Paraná (UTFPR) Engenharia de Computação 1º Período 1/23

Layout de memória Plano de Aula Ponteiros: Conceitos Operadores de referência e dereferência Aritmética Operações Indireção múltipla 2/23

Layout de memória Define como a memória de um executável é organizada Layout de memória Terminologia: Seções: regiões do executável com informações para montagem e relocação (tempo de montagem/linking) Segmentos: regiões de memória com informações necessárias em tempo de execução, um segmento pode conter zero ou mais seções (tempo de execução) 3/23

Considere o seguinte programa: Layout de memória #include <stdio.h> int main() { int a, b, c, d, e; int *f = malloc(4096); int *g = malloc(1024); printf("%p %p %p %p %p\n", &a, &b, &c, &d, &e); printf("%p %p\n", f, g); return 0; } 4/23

Obtendo o mapa de memória pelo OllyDbg 2.01: Layout de memória 5/23

Regiões importantes de memória: Layout de memória Código (text ou code) Dados (data) Pilha (stack) Memória dinâmica (heap) 6/23

Regiões importantes de memória código Layout de memória Contem as instruções em código de máquina do programa Tamanho fixo Tipicamente, por segurança, de apenas leitura 7/23

Regiões importantes de memória dados Layout de memória Contem as variáveis persistentes ao longo da execução de um programa globais ou estáticas constantes (alternativamente, podem ser colocadas no código) Tamanho fixo 8/23

Regiões importantes de memória Pilha Armazena as variáveis locais Layout de memória Estrutura de dados análoga a uma pilha de objetos (e.g., pratos) LIFO (last in first out) Armazenamento temporário de variáveis a permanência de uma variável na pilha é determinada pelo seu escopo Como é a representação das variáveis a,b,c,d,e,f,g na pilha? 9/23

Regiões importantes de memória Memória dinâmica (heap) Armazena memória alocada dinamicamente Layout de memória Em C por funções: malloc, free, realloc Em C++ pelos operadores: new e delete Aula específica mais pra frente! 10/23

Sumário das seções importantes: Layout de memória.text instruções de máquina (código).data variáveis inicializadas globais ou estáticas.rdata variáveis inicializadas constantes ou dados inicializados de apenas leitura (e.g., string literals).bss variáveis globais ou estáticas inicializadas em zero ou não inicializadas região de memória nula Essas seções não são especificadas, dependem da implementação do compilador 11/23

Layout antigo de memória Cuidado com a internet!!! Pilha e heap em direções opostas Conceito válido há décadas atrás (~1970) Layout de memória Tornado obsoleto pelos modelos de memória virtual Na prática o gerenciamento de memória moderno é muito mais complexo, onde a pilha e a heap são alocadas e como elas se comportam depende da arquitetura e do sistema operacional 12/23

Variáveis Quando uma variável é declarada o compilador prepara um espaço para esta variável em um endereço único na memória Ponteiros - Conceito O compilador associa o endereço com o nome da variável Quando um programa usa o nome de uma variável, o endereço apropriado é acessado 13/23

Ponteiros Tipos de dados que permitem endereçar a memória referente à algum tipo Ponteiros - Conceito Definição: variável que armazena um endereço de memória Sintaxe: tipo *nome; 14/23

Declaração: int *p; Ponteiros - Operadores Operador de referência: &p retorna o endereço da variável p Operador de dereferência: *p retorna o valor apontado por p 15/23

Declaração - cuidados: O operador de ponteiro (*) é associado ao nome da variável, não ao tipo int *p, q; Ponteiros - Operadores Equivale a: int *p; int q; 16/23

Exemplo: Ponteiros - Operadores int z = 10; int *p = &z; z 10 &z p p contém o endereço de z *p acessa o conteúdo endereçado *p =20; printf( Valor de z: %d\nvalor de *p:%d, z, *p); 17/23

A lógica aritmética de ponteiros segue a mesma regra de acesso de índices Ponteiros - Aritmética Deve-se ao fato de que acesso a índices é definido usando aritmética de ponteiros: int *arr = (int*)1000; arr[i] == *(arr + i) 18/23

Ponteiros podem ser somados ou subtraídos de valores constantes Ponteiros - Aritmética O deslocamento na memória depende do tipo do ponteiro endereço + valor => endereço + valor*sizeof(tipo) mesma lógica de índices em vetores! 19/23

int buf[10]; int *p1 = &buf[0]; int *p2 = &buf[3]; Ponteiros - Aritmética Ponteiros podem ser subtraídos de outros ponteiros p2 p1; /* ok numero de elementos entre os dois */ Ponteiros não podem ser somados com outros ponteiros p1 + p2; /* erro! não tem significado */ 20/23

int buf[10]; int *p = &buf[0]; ou int *p = buf; Ponteiros - Operações &buf[0] e buf são ambos do tipo (int*) e apontam pro mesmo endereço p[3] == buf[3] 21/23

Atenção! Ponteiros e vetores compartilham aritmética e operadores Porém ponteiros e vetores não são a mesma coisa! Ponteiros - Operações Vetores tem espaço fixo e alocado automaticamente Ponteiros devem ser atribuídos para apontar à algum endereço na memória e podem ser reatribuídos arbitrariamente. 22/23

Ponteiros que apontam para ponteiros int z = 10; int *p = &z; int **q = &p; Ponteiros Indireção múltipla z p q 10 &z &p p contém o endereço de z q contém o endereço de p 23/23