





































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
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
1 / 45
Esta página não é visível na pré-visualização
Não perca as partes importantes!
PROGRAMA ÁREA LIVRE Memória Disponível no Computador Código executável:
Alocação de Memória (2/2)
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)
Variável = endereço de memória Área de memória onde dados são armazenados:
Variáveis Dinâmicas (ponteiros)
Definição de Variáveis do Tipo Ponteiro:
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).