SlideShare ist ein Scribd-Unternehmen logo
1 von 5
Downloaden Sie, um offline zu lesen
1
Alocação de Memória
Todo programa precisa utilizar memória para ser
executado. Quando um programa inicia sua execução, ele
começa a solicitar memória ao sistema operacional, ou seja,
faz a alocação de memória necessária para a sua execução.
Nem sempre a memória alocada na iniciação do programa é
suficiente, então o programa também precisa alocar memória
durante a sua execução.
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 de Memória
Na alocação estática o espaço de memória, que as
variáveis irão utilizar durante a execução do programa, é
definido no processo de compilação. Não sendo possível
alterar o tamanho desse espaço durante a execução do
programa.
Exemplos:
/*Espaço reservado para um valor do tipo char. O
char ocupa 1 byte na memória.*/
char a;
/*Espaço reservado para dez valores do tipo int.
O int ocupa 4 bytes na memória, portanto 4x10=40 bytes.*/
int vetor[10];
/*Espaço reservado para nove(3x3) valores do tipo
double. O double ocupa 8 bytes na memória, portanto
3x3x8=72 bytes.*/
double matriz[3][3];
Este tipo de alocação é utilizado quando se sabe de
antemão a quantidade de memória que será utilizada pelo
programa.
Alocação Dinâmica de Memória
Na alocação dinâmica o espaço de memória, que as
variáveis irão utilizar durante a execução do programa, é
definido enquanto o programa está em execução. Ou seja,
quando não se sabe ao certo quanto de memória será
necessário para o armazenamento das informações, podendo
ser determinadas, sob demanda, em tempo de execução
conforme a necessidade do programa.
2
No padrão C ANSI existem quatro funções para alocação
dinâmica de memória:
1. malloc()
2. calloc()
3. realloc()
4. free()
Todas elas pertencem a biblioteca <stdlib.h>. Iremos
nos concentrar nas funções malloc() e free(), pois são as
mais utilizadas.
Sintaxe da função malloc():
void *malloc(size_t num_bytes);
Esta função recebe como parâmetro "num_bytes" que é o
número de bytes de memória que se deseja alocar. O tipo
size_t é definido em stdlib.h como sendo um inteiro sem
sinal. O interessante é que esta função retorna um ponteiro
do tipo void podendo assim ser atribuído a qualquer tipo de
ponteiro.
Exmeplo:
int *vetor;
vetor = malloc(100);
No exemplo acima foram alocados, dinamicamente, cem
bytes da memória Heap. Quando os programas alocam memória
dinamicamente, a biblioteca de execução C recebe memória a
partir de um reservatório de memória livre (não utilizado)
chamado Heap.
A função malloc() devolve um ponteiro do tipo void,
desta forma pode-se atribuí-lo a qualquer tipo de ponteiro.
Portanto, precisamos fazer uma conversão (cast) para o tipo
desejado e também alocar um espaço compatível com o tipo de
destino. A alocação para atender a essas necessidades deve
ser feita desta forma:
vetor = (int *) malloc (100*sizeof(int));
Como a memória ocupada por um determinado tipo pode
variar de máquina para máquina, devemos utilizar o operador
sizeof, que retorna o tamanho do parâmetro informado.
Conversão para o tipo
int *
Serão alocados 400 bytes no total: 100 x 4.
3
Como foi descrito anteriormente, a memória alocada é
obtida da memória Heap. Contudo, não há garantias de que a
Heap possua memória disponível para o seu programa.
Portanto, é necessário verificar se existe espaço
suficiente na Heap para alocar a memória desejada. Para
atender a este requisito, devemos fazer um teste para
verificar se a memória foi realmente alocada.
Exemplo:
vetor = (int *) malloc (100*sizeof(int));
if (vetor == NULL){
printf ("Não há memória suficiente para alocação");
exit(1);
}
Quando a função malloc não consegue alocar memória,
pois não há espaço suficiente na Heap, a mesma retorna
NULL, indicando que a requisição de memória foi negada.
Quando a alocação é feita com sucesso, malloc retorna um
ponteiro para a região de memória alocada.
Sintaxe da função free():
void free (void *ptr);
Quando o programa não precisa mais da memória que foi
alocada pela função malloc, ele deve liberar esta memória,
ou seja, informar ao Sistema Operacional que aquela região
de memória não será mais utilizada. Para liberar memória
alocada, devemos utilizar a função free.
Na sintaxe da função free, o parâmetro ptr é um
ponteiro para o início da região de memória que se quer
liberar.
Além da função malloc, a linguagem C possui outra
função para alocação dinâmica de memória: calloc.
Sintaxe da função calloc():
void *calloc(size_t num_itens, size_t tam_item);
O parâmetro num_itens especifica quantos elementos
calloc precisa alocar. Já o parâmetro tam_item especifica o
tamanho, em bytes, de cada um desses elementos.
4
Por fim temos a função realloc, que é responsável por
alterar o tamanho de um bloco de memória previamente
alocado.
Sintaxe da função realloc():
void *realloc(void *ptr, size_t tam);
O parâmetro ptr representa a região de memória que se
deseja alterar. Já o parâmetro tam representa o novo
tamanho da memória apontada por ptr. Este valor de tam pode
ser maior ou menor que o original.
Diferenças, Vantagens e Desvantagens Entre
Alocação Estática e Alocação Dinâmica.
Na alocação estática, o espaço de memória é definido
durante o processo de compilação, já na alocação dinâmica o
espaço de memória e reservado durante a execução do
programa.
Na alocação estática não é possível alterar o tamanho
do espaço de memória que foi definido durante a compilação,
já na alocação dinâmica este espaço pode ser alterado
dinamicamente durante a execução.
A alocação estática tem a vantagem de manter os dados
organizados na memória, dispostos um ao lado do outro de
forma linear e sequencial. Isto facilita a sua localização
e manipulação, em contrapartida, precisamos estabelecer
previamente a quantidade máxima necessária de memória para
armazenar uma determinada estrutura de dados.
Exemplo:
int vetor[5] = {10, 50, 35, 45, 60};
22FF20 22FF24 22FF28 22FF2C 22FF30
10 50 35 45 60
Como já foi descrito, a quantidade de memória que se
deve alocar estaticamente é definida durante a compilação,
portanto corre-se o risco de sub ou superestimar a
quantidade de memória alocada. Isso não acontece na
alocação dinâmica, pois como a alocação é feita durante a
execução, sabe-se exatamente a quantidade necessária. Isso
permite otimizar o uso da memória.
5
A alocação dinâmica é feita por meio de funções de
alocação e liberação de memória e é de responsabilidade do
programador usar essas funções de forma coerente, pois o
seu uso incorreto pode causar efeitos colaterais
indesejados no programa como GPF e vazamento de memória.
Na alocação dinâmica podemos redimensionar uma área
previamente alocada, já na alocação estática isso não é
possível, pois o tamanho foi definido durante a compilação.

Weitere ähnliche Inhalte

Was ist angesagt?

Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsortFlávio Freitas
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturadadiogoa21
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em CElaine Cecília Gatto
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalEmanuel Gonçalves
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Tutorial pascal zim
Tutorial pascal zimTutorial pascal zim
Tutorial pascal zim12anogolega
 
Conjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoConjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoElaine Cecília Gatto
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programaçãoGustavo Nazário
 

Was ist angesagt? (16)

Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsort
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
 
Exercicios 01 tms i
Exercicios 01 tms iExercicios 01 tms i
Exercicios 01 tms i
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript Funcional
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Biblioteca Allegro
Biblioteca AllegroBiblioteca Allegro
Biblioteca Allegro
 
Aula 4 | Funções
Aula 4 | Funções Aula 4 | Funções
Aula 4 | Funções
 
Estruturas
EstruturasEstruturas
Estruturas
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Tutorial pascal zim
Tutorial pascal zimTutorial pascal zim
Tutorial pascal zim
 
Conjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoConjunto de instruções mips - introdução
Conjunto de instruções mips - introdução
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
 

Andere mochten auch

Reglas del fútbol
Reglas del fútbolReglas del fútbol
Reglas del fútbolEdwin Cuenca
 
PRESENTACIÓN DE UN TRABAJO ESCRITO
PRESENTACIÓN DE UN TRABAJO ESCRITOPRESENTACIÓN DE UN TRABAJO ESCRITO
PRESENTACIÓN DE UN TRABAJO ESCRITOperest9
 
Libro de lengua y literatura 8vo grado
Libro de lengua y literatura 8vo gradoLibro de lengua y literatura 8vo grado
Libro de lengua y literatura 8vo gradoInstitutoBenitoSalinas
 
Assessing the integumentary system new
Assessing the integumentary system newAssessing the integumentary system new
Assessing the integumentary system newDr Magda Bayoumi
 
Planificador aamtic.docx.docx
Planificador aamtic.docx.docxPlanificador aamtic.docx.docx
Planificador aamtic.docx.docxmarce8230
 
Εξορθολογισμός διαχείριση διδακτέας_υλης_για_το_μάθημα_της_γλώσσας
Εξορθολογισμός διαχείριση διδακτέας_υλης_για_το_μάθημα_της_γλώσσαςΕξορθολογισμός διαχείριση διδακτέας_υλης_για_το_μάθημα_της_γλώσσας
Εξορθολογισμός διαχείριση διδακτέας_υλης_για_το_μάθημα_της_γλώσσαςGeorge Giotis
 
Cap%203 Tejido%20 Epitelial%20 Final
Cap%203 Tejido%20 Epitelial%20 FinalCap%203 Tejido%20 Epitelial%20 Final
Cap%203 Tejido%20 Epitelial%20 FinalCEMA
 
Clase 5 archivos multimedia
Clase 5 archivos multimediaClase 5 archivos multimedia
Clase 5 archivos multimediasalomonaquino
 
Windows 8: votre poste de travail réinventé
Windows 8: votre poste de travail réinventéWindows 8: votre poste de travail réinventé
Windows 8: votre poste de travail réinventéMicrosoft France
 
A IMPORTÂNCIA DA LEITURA NO DESENVOLVIMENTO SOCIAL E COGNITIVO DO SER HUMANO:...
A IMPORTÂNCIA DA LEITURA NO DESENVOLVIMENTO SOCIAL E COGNITIVO DO SER HUMANO:...A IMPORTÂNCIA DA LEITURA NO DESENVOLVIMENTO SOCIAL E COGNITIVO DO SER HUMANO:...
A IMPORTÂNCIA DA LEITURA NO DESENVOLVIMENTO SOCIAL E COGNITIVO DO SER HUMANO:...Jede Silva
 
Formatos de multimedia más usados
Formatos de multimedia más usadosFormatos de multimedia más usados
Formatos de multimedia más usadosPavel Crisóstomo
 
Programa de trazabilidad 583802
Programa de trazabilidad 583802Programa de trazabilidad 583802
Programa de trazabilidad 583802Jose Luis Medina
 
Onderzoek: Effect van achtergrondmuziek in merkwinkels op de waargenomen merk...
Onderzoek: Effect van achtergrondmuziek in merkwinkels op de waargenomen merk...Onderzoek: Effect van achtergrondmuziek in merkwinkels op de waargenomen merk...
Onderzoek: Effect van achtergrondmuziek in merkwinkels op de waargenomen merk...Piet van den Boer
 
Manual+de+camtasia+para+bibliotecarios
Manual+de+camtasia+para+bibliotecariosManual+de+camtasia+para+bibliotecarios
Manual+de+camtasia+para+bibliotecariosadrianchy
 

Andere mochten auch (20)

Reglas del fútbol
Reglas del fútbolReglas del fútbol
Reglas del fútbol
 
PRESENTACIÓN DE UN TRABAJO ESCRITO
PRESENTACIÓN DE UN TRABAJO ESCRITOPRESENTACIÓN DE UN TRABAJO ESCRITO
PRESENTACIÓN DE UN TRABAJO ESCRITO
 
Libro de lengua y literatura 8vo grado
Libro de lengua y literatura 8vo gradoLibro de lengua y literatura 8vo grado
Libro de lengua y literatura 8vo grado
 
Assessing the integumentary system new
Assessing the integumentary system newAssessing the integumentary system new
Assessing the integumentary system new
 
Planificador aamtic.docx.docx
Planificador aamtic.docx.docxPlanificador aamtic.docx.docx
Planificador aamtic.docx.docx
 
Competencias BáSicas (Todas Las Sesiones)
Competencias BáSicas (Todas Las Sesiones)Competencias BáSicas (Todas Las Sesiones)
Competencias BáSicas (Todas Las Sesiones)
 
Εξορθολογισμός διαχείριση διδακτέας_υλης_για_το_μάθημα_της_γλώσσας
Εξορθολογισμός διαχείριση διδακτέας_υλης_για_το_μάθημα_της_γλώσσαςΕξορθολογισμός διαχείριση διδακτέας_υλης_για_το_μάθημα_της_γλώσσας
Εξορθολογισμός διαχείριση διδακτέας_υλης_για_το_μάθημα_της_γλώσσας
 
Cap%203 Tejido%20 Epitelial%20 Final
Cap%203 Tejido%20 Epitelial%20 FinalCap%203 Tejido%20 Epitelial%20 Final
Cap%203 Tejido%20 Epitelial%20 Final
 
Temas transversais
Temas transversaisTemas transversais
Temas transversais
 
Clase 5 archivos multimedia
Clase 5 archivos multimediaClase 5 archivos multimedia
Clase 5 archivos multimedia
 
Generación de ordenadores
Generación de ordenadoresGeneración de ordenadores
Generación de ordenadores
 
Windows 8: votre poste de travail réinventé
Windows 8: votre poste de travail réinventéWindows 8: votre poste de travail réinventé
Windows 8: votre poste de travail réinventé
 
A IMPORTÂNCIA DA LEITURA NO DESENVOLVIMENTO SOCIAL E COGNITIVO DO SER HUMANO:...
A IMPORTÂNCIA DA LEITURA NO DESENVOLVIMENTO SOCIAL E COGNITIVO DO SER HUMANO:...A IMPORTÂNCIA DA LEITURA NO DESENVOLVIMENTO SOCIAL E COGNITIVO DO SER HUMANO:...
A IMPORTÂNCIA DA LEITURA NO DESENVOLVIMENTO SOCIAL E COGNITIVO DO SER HUMANO:...
 
Formatos de multimedia más usados
Formatos de multimedia más usadosFormatos de multimedia más usados
Formatos de multimedia más usados
 
Programa de trazabilidad 583802
Programa de trazabilidad 583802Programa de trazabilidad 583802
Programa de trazabilidad 583802
 
Onderzoek: Effect van achtergrondmuziek in merkwinkels op de waargenomen merk...
Onderzoek: Effect van achtergrondmuziek in merkwinkels op de waargenomen merk...Onderzoek: Effect van achtergrondmuziek in merkwinkels op de waargenomen merk...
Onderzoek: Effect van achtergrondmuziek in merkwinkels op de waargenomen merk...
 
Instalacion de Elastix
Instalacion de ElastixInstalacion de Elastix
Instalacion de Elastix
 
Manual+de+camtasia+para+bibliotecarios
Manual+de+camtasia+para+bibliotecariosManual+de+camtasia+para+bibliotecarios
Manual+de+camtasia+para+bibliotecarios
 
Ley 527 1999
Ley 527 1999Ley 527 1999
Ley 527 1999
 
Mariela y Jeniffer
Mariela y JenifferMariela y Jeniffer
Mariela y Jeniffer
 

Ähnlich wie Estrdado materia-06-alocacao-de-memoria1

Gabarito da P1 de PROG
Gabarito da P1 de PROGGabarito da P1 de PROG
Gabarito da P1 de PROGMarcos de Vita
 
Aula 10 de algoritmos com raciocínio lógico e desenvolvimento de código
Aula 10 de algoritmos com raciocínio lógico e desenvolvimento de códigoAula 10 de algoritmos com raciocínio lógico e desenvolvimento de código
Aula 10 de algoritmos com raciocínio lógico e desenvolvimento de códigossusere36c31
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem CLeonardo Lima
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptssuserd654cb1
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cMaicon Rodrigues
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
Gerenciamento de memoria
Gerenciamento de memoriaGerenciamento de memoria
Gerenciamento de memoriaJailson Silva
 
Java memory model primary ref. - faq
Java memory model   primary ref. - faqJava memory model   primary ref. - faq
Java memory model primary ref. - faqPedro De Almeida
 
Cet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C IntroducaoCet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C Introducaommind
 

Ähnlich wie Estrdado materia-06-alocacao-de-memoria1 (20)

Gabarito da P1 de PROG
Gabarito da P1 de PROGGabarito da P1 de PROG
Gabarito da P1 de PROG
 
Aula 10 de algoritmos com raciocínio lógico e desenvolvimento de código
Aula 10 de algoritmos com raciocínio lógico e desenvolvimento de códigoAula 10 de algoritmos com raciocínio lógico e desenvolvimento de código
Aula 10 de algoritmos com raciocínio lógico e desenvolvimento de código
 
Função malloc
Função mallocFunção malloc
Função malloc
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
 
Simulador Funcional
Simulador FuncionalSimulador Funcional
Simulador Funcional
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Gerenciamento de memoria
Gerenciamento de memoriaGerenciamento de memoria
Gerenciamento de memoria
 
Apostila c++ básico
Apostila c++ básicoApostila c++ básico
Apostila c++ básico
 
Apostila c++ básico (1)
Apostila c++ básico (1)Apostila c++ básico (1)
Apostila c++ básico (1)
 
Funções em C
Funções em CFunções em C
Funções em C
 
Java memory model primary ref. - faq
Java memory model   primary ref. - faqJava memory model   primary ref. - faq
Java memory model primary ref. - faq
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Progr
ProgrProgr
Progr
 
Cet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C IntroducaoCet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C Introducao
 

Kürzlich hochgeladen

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 

Kürzlich hochgeladen (9)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Estrdado materia-06-alocacao-de-memoria1

  • 1. 1 Alocação de Memória Todo programa precisa utilizar memória para ser executado. Quando um programa inicia sua execução, ele começa a solicitar memória ao sistema operacional, ou seja, faz a alocação de memória necessária para a sua execução. Nem sempre a memória alocada na iniciação do programa é suficiente, então o programa também precisa alocar memória durante a sua execução. 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 de Memória Na alocação estática o espaço de memória, que as variáveis irão utilizar durante a execução do programa, é definido no processo de compilação. Não sendo possível alterar o tamanho desse espaço durante a execução do programa. Exemplos: /*Espaço reservado para um valor do tipo char. O char ocupa 1 byte na memória.*/ char a; /*Espaço reservado para dez valores do tipo int. O int ocupa 4 bytes na memória, portanto 4x10=40 bytes.*/ int vetor[10]; /*Espaço reservado para nove(3x3) valores do tipo double. O double ocupa 8 bytes na memória, portanto 3x3x8=72 bytes.*/ double matriz[3][3]; Este tipo de alocação é utilizado quando se sabe de antemão a quantidade de memória que será utilizada pelo programa. Alocação Dinâmica de Memória Na alocação dinâmica o espaço de memória, que as variáveis irão utilizar durante a execução do programa, é definido enquanto o programa está em execução. Ou seja, quando não se sabe ao certo quanto de memória será necessário para o armazenamento das informações, podendo ser determinadas, sob demanda, em tempo de execução conforme a necessidade do programa.
  • 2. 2 No padrão C ANSI existem quatro funções para alocação dinâmica de memória: 1. malloc() 2. calloc() 3. realloc() 4. free() Todas elas pertencem a biblioteca <stdlib.h>. Iremos nos concentrar nas funções malloc() e free(), pois são as mais utilizadas. Sintaxe da função malloc(): void *malloc(size_t num_bytes); Esta função recebe como parâmetro "num_bytes" que é o número de bytes de memória que se deseja alocar. O tipo size_t é definido em stdlib.h como sendo um inteiro sem sinal. O interessante é que esta função retorna um ponteiro do tipo void podendo assim ser atribuído a qualquer tipo de ponteiro. Exmeplo: int *vetor; vetor = malloc(100); No exemplo acima foram alocados, dinamicamente, cem bytes da memória Heap. Quando os programas alocam memória dinamicamente, a biblioteca de execução C recebe memória a partir de um reservatório de memória livre (não utilizado) chamado Heap. A função malloc() devolve um ponteiro do tipo void, desta forma pode-se atribuí-lo a qualquer tipo de ponteiro. Portanto, precisamos fazer uma conversão (cast) para o tipo desejado e também alocar um espaço compatível com o tipo de destino. A alocação para atender a essas necessidades deve ser feita desta forma: vetor = (int *) malloc (100*sizeof(int)); Como a memória ocupada por um determinado tipo pode variar de máquina para máquina, devemos utilizar o operador sizeof, que retorna o tamanho do parâmetro informado. Conversão para o tipo int * Serão alocados 400 bytes no total: 100 x 4.
  • 3. 3 Como foi descrito anteriormente, a memória alocada é obtida da memória Heap. Contudo, não há garantias de que a Heap possua memória disponível para o seu programa. Portanto, é necessário verificar se existe espaço suficiente na Heap para alocar a memória desejada. Para atender a este requisito, devemos fazer um teste para verificar se a memória foi realmente alocada. Exemplo: vetor = (int *) malloc (100*sizeof(int)); if (vetor == NULL){ printf ("Não há memória suficiente para alocação"); exit(1); } Quando a função malloc não consegue alocar memória, pois não há espaço suficiente na Heap, a mesma retorna NULL, indicando que a requisição de memória foi negada. Quando a alocação é feita com sucesso, malloc retorna um ponteiro para a região de memória alocada. Sintaxe da função free(): void free (void *ptr); Quando o programa não precisa mais da memória que foi alocada pela função malloc, ele deve liberar esta memória, ou seja, informar ao Sistema Operacional que aquela região de memória não será mais utilizada. Para liberar memória alocada, devemos utilizar a função free. Na sintaxe da função free, o parâmetro ptr é um ponteiro para o início da região de memória que se quer liberar. Além da função malloc, a linguagem C possui outra função para alocação dinâmica de memória: calloc. Sintaxe da função calloc(): void *calloc(size_t num_itens, size_t tam_item); O parâmetro num_itens especifica quantos elementos calloc precisa alocar. Já o parâmetro tam_item especifica o tamanho, em bytes, de cada um desses elementos.
  • 4. 4 Por fim temos a função realloc, que é responsável por alterar o tamanho de um bloco de memória previamente alocado. Sintaxe da função realloc(): void *realloc(void *ptr, size_t tam); O parâmetro ptr representa a região de memória que se deseja alterar. Já o parâmetro tam representa o novo tamanho da memória apontada por ptr. Este valor de tam pode ser maior ou menor que o original. Diferenças, Vantagens e Desvantagens Entre Alocação Estática e Alocação Dinâmica. Na alocação estática, o espaço de memória é definido durante o processo de compilação, já na alocação dinâmica o espaço de memória e reservado durante a execução do programa. Na alocação estática não é possível alterar o tamanho do espaço de memória que foi definido durante a compilação, já na alocação dinâmica este espaço pode ser alterado dinamicamente durante a execução. A alocação estática tem a vantagem de manter os dados organizados na memória, dispostos um ao lado do outro de forma linear e sequencial. Isto facilita a sua localização e manipulação, em contrapartida, precisamos estabelecer previamente a quantidade máxima necessária de memória para armazenar uma determinada estrutura de dados. Exemplo: int vetor[5] = {10, 50, 35, 45, 60}; 22FF20 22FF24 22FF28 22FF2C 22FF30 10 50 35 45 60 Como já foi descrito, a quantidade de memória que se deve alocar estaticamente é definida durante a compilação, portanto corre-se o risco de sub ou superestimar a quantidade de memória alocada. Isso não acontece na alocação dinâmica, pois como a alocação é feita durante a execução, sabe-se exatamente a quantidade necessária. Isso permite otimizar o uso da memória.
  • 5. 5 A alocação dinâmica é feita por meio de funções de alocação e liberação de memória e é de responsabilidade do programador usar essas funções de forma coerente, pois o seu uso incorreto pode causar efeitos colaterais indesejados no programa como GPF e vazamento de memória. Na alocação dinâmica podemos redimensionar uma área previamente alocada, já na alocação estática isso não é possível, pois o tamanho foi definido durante a compilação.