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

Documentos relacionados
Programação. Cap. 12 Gestão de Memória Dinâmica

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

A linguagem C permite dois tipos de alocação de memória: Alocação estática e alocação dinâmica.

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

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

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo

Reinaldo Gomes Alocação Dinâmica

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 11 Gestão de Memória Dinâmica

13. ALOCAÇÃO DINÂMICA DE MEMÓRIA

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória

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

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

Programação Computacional Aula 16: Alocação Dinâmica de Memória

Índice. Capítulo 1 - Introdução

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

Princípios de Desenvolvimento de Algoritmos MAC122

Laboratório de Introdução à Ciência da Computação I

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

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

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

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Função "malloc" e "calloc":

Alocação Dinâmica em C

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

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

Ponteiros. Baseado nos slides do Prof. Mauro.

Correção dos exercícios

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

1 Exercícios com ponteiros

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

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

Estruturas de Dados. Profa. Juliana Pinheiro Campos

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

Ponteiros. Introdução

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

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

Estruturas dinâmicas Ponteiros

O que é um apontador em C (type pointer in C)?

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

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

Ponteiros & tabelas (cont.) K&R: Capítulo 5

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

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

Alocação dinâmica de Memória

LINGUAGEM C: ALOCAÇÃO DINÂMICA

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

Linguagem C. Ponteiros. Alex Vidigal Bastos.

Ponteiros e Alocação de Memória

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

Estruturas Dinâmicas - Ponteiros

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

1 Exercícios com ponteiros

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio

Alocação Dinâmica de Memória. Programação II

Algoritmos e Estruturas de dados

Professor: Jó Ueyama Estagiário PAE: Heitor Freitas

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

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Linguagem C: Ponteiros - Alocação Dinâmica

INF 1007 Programação II

Fundamentos de Programação

Programação Procedimental GBC /1 Prof. Renan Cattelan Prática 10. Estruturas e alocação dinâmica

AULA 6. Conceitos. Melhores momentos. Conceitos. Conceitos. Conceitos. Conceitos

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

5. Vetores e alocação dinâmica

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

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Aula 24 Ponteiros, vetores e structs

DAS5102 Fundamentos da Estrutura da Informação

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

Aula 25: Alocação Dinâmica

MC-102 Aula 19 Ponteiros II

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

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

Gilberto A. S. Segundo. 24 de agosto de 2011

ESTRUTURAS DE DADOS (LEI, LM, LEE) PROGRAMAÇÃO III (LTSI) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2017/2018

Ponteiros e Tabelas. K&R: Capítulo 5

Alocação Dinâmica de Memória - Exercício

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

Plano de Aula Segunda-feira Tarde 13/10/2014 Objetivo: Introduzir o conceito de alocação dinâmica na memória e registros / structs.

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

Referências. Programação de Computadores II. Cap. 6 Matrizes. Tópicos. Alocação Estática versus Dinâmica. Alocação Estática versus Dinâmica

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

Introdução à Computação

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

BCC202 - Estrutura de Dados I

Estruturas de Dados. Módulo 6 Matrizes. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Estrutura de dados 1. Ponteiros

ED1 - Aula 01 Introducao e revisão

Ponteiros, ponteiros e vetores e alocação dinâmica de memória

Programação de Computadores II

11a. Aula Ponteiros e Vetores

Alocação Dinâmica em C

Estruturas de dados. IPC2 1999/2000 F. Nunes Ferreira

Ponteiros e Alocação Dinâmica. Prof. Péricles Miranda

Transcrição:

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

Memória Estática 2/34 Memória Estática Exemplo #include <stdioh> main() { int V[300], N; do{ printf ( N =? ); scanf ( %d, &N); while ((N < 0) (N > 300); for (i = 0; i < N, i++) { printf ( Insira um inteiro: ); scanf ( %d, &V[i]);

Memória Estática 3/34 Exemplo (cont) 100500 200720 V 110608 N 110612 110616 110620 110624 110628 200720 V[0] 200724 V[1] 201516 V[199] 201520 V[200] 201916 V[299] 110632 201920 Memória reservada pelo programa Memória reservada e usada pelo programa

Memória Estática 4/34 Exemplo (cont) #include <stdioh> main() { int V[300], N; do{ printf ( N =? ); scanf ( %d, &N); while ((N < 0) (N > 300); for (i = 0; i < N, i++) { printf ( Insira um inteiro: ); scanf ( %d, &V[i]);

Memória Estática 5/34 Exemplo (cont) 100500 200720 V 110608 200 N 110612 110616 110620 110624 110628 200720 V[0] 200724 V[1] 201516 V[199] 201520 V[200] 201916 V[299] 110632 201920 Memória reservada pelo programa Memória reservada e usada pelo programa

Memória Estática 6/34 Exemplo (cont) #include <stdioh> main() { int V[300], N; do{ printf ( N =? ); scanf ( %d, &N); while ((N < 0) (N > 300); for (i = 0; i < N, i++) { printf ( Insira um inteiro: ); scanf ( %d, &V[i]);

Memória Estática 7/34 Exemplo (cont) 100500 200720 V 110608 200 N 110612 110616 110620 110624 110628 200720 15 V[0] 200724-45 V[1] 201516 12 V[199] 201520 V[200] 201916 V[299] 110632 201920 Memória reservada pelo programa Memória reservada e usada pelo programa

Funções associadas à gestão dinâmica de memória 8/34 Funções associadas à gestão dinâmica de memória Alocação/reserva de memória - calloc - malloc Realocação de memória alocada anteriormente - realloc Libertação de memória alocada/realocada anteriormente - free Biblioteca stdlibh

Alocação dinâmica de memória (calloc) 9/34 Alocação dinâmica de memória (calloc) void *calloc (size_t nmemb, size_t size) nmemb - número de elementos que se pretende alocar/reservar memória size - tamanho dos elementos que se pretende alocar/reservar memória Devolve: - o endereço (apontador) para a primeira posição do bloco, ou - NULL quando não for possível alocar memória

Alocação dinâmica de memória (calloc) 10/34 void *calloc (size_t nmemb, size_t size) Descrição: - Reserva um bloco de memória contígua com espaço suficiente para armazenar nmemb elementos de dimensão size cada elemento; - size_t é o tipo usado para especificar as dimensões numéricas em várias funções; - o tipo de retorno void * corresponde a um endereço genérico de memória (permite a utilização por todo o tipo de ponteiro); - todas as posições do bloco de memória são inicializadas com zero

Alocação dinâmica de memória (calloc) 11/34 Exemplo float *p; p = (float *) calloc (200, sizeof (float)); - reserva de memória para um bloco de 200 reais; - a partir daqui, p pode ser tratado como um vetor de 200 posições (para 200 valores reais); - p é um ponteiro para o primeiro elemento do vetor; - sizeof() é um operador do C que devolve a dimensão (em geral, em bytes) do tipo ou variável indicado no argumento; - (float *) funciona como um operador de cast (obriga a devolver um ponteiro para uma variável do tipo real)

Alocação dinâmica de memória (calloc) 12/34 Exemplo 100500 200720 p 110608 110612 200720 0 p[0] 200724 0 p[1] 201516 0 p[199] 110616 201520 110620 110624 110628 201916 110632 201920 Memória reservada e usada pelo programa

Alocação dinâmica de memória (calloc) 13/34 Exemplo (cont) 100500 200720 p 110608 110612 200720 0 *p 200724 0 *(p+1) 201516 0 *p([199) 110616 201520 110620 110624 110628 201916 110632 201920 Memória reservada e usada pelo programa

Alocação dinâmica de memória (malloc) 14/34 Alocação dinâmica de memória (malloc) void *malloc (size_t total_size) total_size - número total em bytes do bloco de memória a alocar/reservar Devolve: - o endereço (ponteiro) para a primeira posição do bloco, ou - NULL quando não for possível alocar memória Descrição: - reserva um bloco de memória contígua de dimensão total_size expressa em bytes; - size_t é o tipo usado para especificar as dimensões numéricas em funções do C; - o tipo de retorno void * corresponde a um endereço genérico de memória (permite a utilização por todo o tipo de ponteiro); - calloc(n, d) pode ser substituído simplesmente por malloc(nxd); - as posições do bloco não são inicializadas com qualquer valor

Realocação dinâmica de memória (realloc) 15/34 Realocação dinâmica de memória (realloc) void *realloc (void *ptr, size_t total_new_size) ptr - ponteiro para o bloco de memória reservado antes; total_new_size - dimensão total que se pretende agora para o mesmo bloco; Devolve: - o endereço (ponteiro) para a primeira posição do bloco redimensionado, ou - NULL quando não for possível alocar memória Descrição: - o segundo argumento (size_t total_new_size) tem um significado semelhante ao da função malloc (size_t total_size)

Libertação de memória (free) 16/34 Libertação de memória (free) void free (void *ptr) ptr - ponteiro para o bloco de memória reservado antes, o qual foi devolvido por malloc, calloc ou realloc Devolve: - Nada

Exemplo 17/34 #include <stdioh> #include <stdlibh> main(){ int *V, N; do{ Exemplo printf( Insira a dimensão do vetor: ); scanf( %d, &N); while (N < 0); V = (int *) malloc(n * sizeof(int)); for (i = 0; i < N; i++){ printf( Inserir um valor inteiro: ); scanf( %d, &V[i]); V = (int *) realloc(v, (N+100) * sizeof(int)); free(v);

Exemplo 18/34 Representação gráfica 100500 V 110608 N 110612 110616 110620 110624 110628 200720 200724 201516 201520 201916 110632 201920 Memória reservada pelo programa

Exemplo 19/34 #include <stdioh> #include <stdlibh> main(){ int *V, N; do{ printf( Insira a dimensão do vetor: ); scanf( %d, &N); while (N < 0); V = (int *) malloc(n * sizeof(int)); for (i = 0; i < N; i++){ printf( Inserir um valor inteiro: ); scanf( %d, &V[i]); V = (int *) realloc(v, (N+100) * sizeof(int)); free(v);

Exemplo 20/34 Representação gráfica 100500 V 110608 200 N 110612 110616 110620 110624 110628 200720 200724 201516 201520 201916 110632 201920 Memória reservada pelo programa Memória reservada e usada pelo programa

Exemplo 21/34 #include <stdioh> #include <stdlibh> main(){ int *V, N; do{ printf( Insira a dimensão do vetor: ); scanf( %d, &N); while (N < 0); V = (int *) malloc(n * sizeof(int)); for (i = 0; i < N; i++){ printf( Inserir um valor inteiro: ); scanf( %d, &V[i]); V = (int *) realloc(v, (N+100) * sizeof(int)); free(v);

Exemplo 22/34 Representação gráfica 100500 200720 V 110608 200 N 110612 200720 V[0] 200724 V[1] 201516 V[199] 110616 201520 110620 110624 110628 201916 110632 201920 Memória reservada pelo programa Memória reservada e usada pelo programa

Exemplo 23/34 #include <stdioh> #include <stdlibh> main(){ int *V, N; do{ printf( Insira a dimensão do vetor: ); scanf( %d, &N); while (N < 0); V = (int *) malloc(n * sizeof(int)); for (i = 0; i < N; i++){ printf( Inserir um valor inteiro: ); scanf( %d, &V[i]); V = (int *) realloc(v, (N+100) * sizeof(int)); free(v);

Exemplo 24/34 Representação gráfica 100500 200720 V 110608 200 N 110612 200720 45 V[0] 200724-65 V[1] 201516 38 V[199] 110616 201520 110620 110624 110628 201916 110632 201920 Memória reservada e usada pelo programa

Exemplo 25/34 #include <stdioh> #include <stdlibh> main(){ int *V, N; do{ printf( Insira a dimensão do vetor: ); scanf( %d, &N); while (N < 0); V = (int *) malloc(n * sizeof(int)); for (i = 0; i < N; i++){ printf( Inserir um valor inteiro: ); scanf( %d, &V[i]); V = (int *) realloc(v, (N+100) * sizeof(int)); free(v);

Exemplo 26/34 Representação gráfica (caso 1) 100500 200720 V 110608 200 N 110612 200720 45 V[0] 200724-65 V[1] 201516 38 V[199] 110616 201520 110620 110624 110628 201916 110632 201920 Memória reservada e usada pelo programa Memória livre

Exemplo 27/34 Representação gráfica (caso 1) 100500 200720 V 110608 200 N 110612 110616 110620 110624 110628 200720 45 V[0] 200724-65 V[1] 201516 38 V[199] 201520 V[200] 201916 V[299] 110632 201920 Memória reservada pelo programa Memória reservada e usada pelo programa

Exemplo 28/34 Representação gráfica (caso 2) 100500 200720 V 110608 200 N 110612 200720 45 V[0] 200724-65 V[1] 201516 38 V[199] 110616 201520 110620 110624 110628 201916 110632 201920 Memória reservada e usada pelo programa Memória ocupada (ou parte dela)

Exemplo 29/34 Representação gráfica (caso 2) 100500 220120 V 110608 200 N 110612 110616 110620 110624 110628 110632 200720 45 201516 38 201520 201916 220120 45 V[0] 220916 38 V[199] 221316 V[299] Memória reservada pelo programa Memória reservada e usada pelo programa

Exemplo 30/34 #include <stdioh> #include <stdlibh> main(){ int *V, N; do{ printf( Insira a dimensão do vetor: ); scanf( %d, &N); while (N < 0); V = (int *) malloc(n * sizeof(int)); for (i = 0; i < N; i++){ printf( Inserir um valor inteiro: ); scanf( %d, &V[i]); V = (int *) realloc(v, (N+100) * sizeof(int)); free(v);

Exemplo 31/34 Representação gráfica 100500 NULL V 110608 200 N 110612 200720 45 200724-65 201516 38 110616 201520 110620 110624 110628 201916 110632 201920 Memória reservada e usada pelo programa

Memória Dinâmica vs Estática 32/34 Memória Dinâmica vs Estática #include <stdioh> main (){ int V[3000], N; do{ printf ( N = ); scanf ( %d, &N); while ((N < 0) (N > 3000)); for (i = 0; i < N, i++){ printf ( Insira um inteiro: ); scanf ( %d, &V[i]); #include <stdioh> #include <stdlibh> main (){ int *V, N; do{ printf ( N = ); scanf ( %d, &N); while (N < 0); V = (int*) malloc (N*sizeof (int)); for (i = 0; i < N, i++){ printf ( Insira um inteiro: ); scanf ( %d, &V[i]); free (V);

Memória Estática (exemplo) 33/34 Memória Estática (exemplo) 100500 200720 V 110608 200 N 110612 110616 110620 110624 110628 200720 15 V[0] 200724-45 V[1] 201516 12 V[199] 201520 V[200] 201916 V[299] 110632 201920 Memória reservada pelo programa Memória reservada e usada pelo programa

Memória Dinâmica (exemplo) 34/34 Memória Dinâmica (exemplo) 100500 200720 V 110608 200 N 110612 200720 45 V[0] 200724-65 V[1] 201516 38 V[199] 110616 201520 110620 110624 110628 201916 110632 201920 Memória reservada e usada pelo programa