Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Gerenciamento de Memória: Alocação e Liberação de Memória Dinâmica usando Ponteiros, Esquemas de Informática

Este documento explica o conceito de gerenciamento de memória pelo sistema operacional, com ênfase na alocação e liberação de memória dinâmica utilizando ponteiros. O texto aborda a alocação de memória para componentes individuais durante a execução de um programa, subdimensionamento e superdimensionamento de vetores, definição de variáveis do tipo ponteiro, e a representação interna de variáveis do tipo ponteiro. Além disso, o documento apresenta um exemplo de código em c que utiliza ponteiros para alocar e liberar memória dinamicamente.

Tipologia: Esquemas

2021

Compartilhado em 07/01/2021

layla-paula
layla-paula 🇧🇷

1 documento

1 / 45

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Ementário
Noções de hardware e software.
Conceitos Fundamentais.
Vetores, cadeia de caracteres e registros.
Definição e manipulação de arquivos externos.
Subprogramação.
Alocação dinâmica de memória.
Estruturas de dados básicas: listas lineares, pilha e
fila. Árvores e grafos.
Métodos de ordenação.
Aplicações práticas utilizando uma linguagem
estruturada de alto nível (Linguagem C).
Noções de Programação Orientada a Objetos com
a Linguagem C++.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d

Pré-visualização parcial do texto

Baixe Gerenciamento de Memória: Alocação e Liberação de Memória Dinâmica usando Ponteiros e outras Esquemas em PDF para Informática, somente na Docsity!

Ementário

  • (^) Noções de hardware e software.
  • (^) Conceitos Fundamentais.
  • (^) Vetores, cadeia de caracteres e registros.
  • (^) Definição e manipulação de arquivos externos.
  • (^) Subprogramação.
  • (^) Alocação dinâmica de memória.
  • (^) Estruturas de dados básicas: listas lineares, pilha e

fila. Árvores e grafos.

  • (^) Métodos de ordenação.
  • (^) Aplicações práticas utilizando uma linguagem

estruturada de alto nível (Linguagem C).

  • (^) Noções de Programação Orientada a Objetos com

a Linguagem C++.

PROGRAMA ÁREA LIVRE Memória Disponível no Computador Código executável:

  • instruções (compilador)
  • armazenamento dos dados (estrutura dos dados) Memória livre, gerenciada pelo sistema operacional

Alocação de Memória (2/2)

  • (^) Dinâmica
    • (^) Quanto o programa é capaz de criar novas

variáveis enquanto está sendo executado.

  • (^) Alocação de memória para componentes

individuais no instante em que eles começam a

existir durante a execução do programa.

  • (^) malloc : alocar memória.
  • (^) free : liberar áreas da memória ocupadas.

Alocação Estática

x

Alocação Dinâmica

Alocação Estática (2/3) #define maxTam 1000 struct rgCliente { char nome[40]; char sexo; int idade; }; struct rgCliente Cliente [maxTam]; Neste exemplo são reservadas, durante toda a execução do programa, 1.000 posições para o vetor Cliente. Será que um sistema de cadastro de clientes, que usa um vetor com 1.000 posições é o suficiente? Será que nunca irá acontecer a necessidade de se cadastrar o cliente de número 1.001? E o que acontece quando os clientes cadastrados nunca passarem de 100? As 900 posições de memória restantes, não poderão ser utilizadas por outras variáveis, pois já estão reservadas.

Alocação Estática (3/3)

  • (^) Ao se determinar o máximo de elementos que o vetor irá conter, pode-se ocorrer um dos seguintes casos: - (^) subdimensionamento : haverá mais elementos a

serem armazenados do que o vetor é capaz de

conter;

  • (^) superdimensionamento : na maior parte do

tempo, somente uma pequena porção do vetor

será realmente utilizada.

Variável = endereço de memória Área de memória onde dados são armazenados:

  • (^) variável estática (lista de variáveis)
    • (^) existência prevista no código do programa

(tempo de compilação)

  • (^) quantidade de memória utilizada pelo programa

não varia

  • (^) variável dinâmica ( malloc , free )
    • (^) passam a existir durante a execução do programa

Variáveis Dinâmicas (ponteiros)

  • (^) ponteiros, ou apontadores, ou indicadores, ou referências
  • (^) variáveis especiais que armazenam endereços de memória, isto é, endereços de outras variáveis na memória
  • (^) armazenam um endereço e não um valor
  • (^) em C, o ponteiro é mais um tipo permitido como qualquer outro

Definição de Variáveis do Tipo Ponteiro:

  1. Ponteiros p/tipos pré-definidos (básicos): **int *** ptInt; **float *** ptFloat; **char *** ptChar; // definição de string
  2. Ponteiros p/tipos definidos pelo programador: struct rgFunc { char nome[40]; char sexo; float salario; } ; struct rgFunc ***** ptFunc;

Os Operadores de Ponteiros: * e & (1/2)

O operador & devolve o endereço na memória do

seu operando. Por exemplo:

int x = 10;

int * p;

p = & x;

coloca em p o endereço da memória que contém a

variável x. Esse endereço é a posição interna

ao computador da variável. O endereço não tem

relação alguma com o valor de x. O operador

& pode ser imaginado como retornando “o endereço

de”, ou seja, “ p recebe o endereço de x ”.

Usando os operadores de ponteiros ( e &)* void main() { int x, ***** p; x = 10; p = & x; printf("%d", ***** p); } Obs. quando um ponteiro contém o endereço de uma variável, diz-se que o ponteiro está "apontando" para essa variável. Se uma variável ponteiro p armazena um endereço de memória qualquer, então * p apresenta o valor armazenado naquele endereço. Neste caso, * p corresponde ao número inteiro 10. o operador & é usado para obter o endereço de uma variável estática o operador ***** é usado para obter o valor de um endereço de memória

Trabalhando com a memória apontada pelo ponteiro: Para trabalhar a memória que o ponteiro p está apontando, utiliza-se o operador ***** , com a sintaxe: *p. Naturamente p deverá ter um endereço válido, isto é, p deve estar apontando para uma variável ou para uma memória de tipo compatível. Para tanto, dois outros tipos de atribuições podem ser feitos com variáveis do tipo ponteiro: a) um ponteiro pode receber o conteúdo de outro ponteiro compatível (apontar para um endereço que contêm um valor do mesmo tipo); b) um ponteiro pode receber um endereço especial, chamado NULL (nulo), que serve para dizer que é um endereço nulo e que não haverá nenhuma variável neste endereço de memória.

Alocação Dinâmica de Memória em C: A área de memória que não é utilizada por um programa é organizada e gerenciada pelo sistema operacional, podendo ser alocada através de comandos padronizados oferecidos pela própria linguagem C. Para alocar uma porção da área livre, basta utilizar o comando malloc , sendo p uma variável ponteiro: p = (int ***** ) malloc (sizeof(int)); aloca uma área de memória suficiente para armazenar um número inteiro e guarda o endereço ocupado em p , já o comando: free (p); serve para liberar a área de memória cujo endereço está em p. Uma área de memória, que foi alocada pelo comando malloc , somente volta a ficar disponível se for explicitamente liberada pelo comando free , caso contrário, a liberação da área só ocorrerá quando o programa que fez a alocação terminar de executar. Para completar, p = NULL; marca p como um endereço nulo. Este endereço é útil para dizer que o ponteiro ainda não tem nenhum endereço válido (não aponta para ninguém).