• Nenhum resultado encontrado

AulaExtraAlloc

N/A
N/A
Protected

Academic year: 2021

Share "AulaExtraAlloc"

Copied!
6
0
0

Texto

(1)ANHANGUERA ENSINO SUPERIOR Faculdades de Valinhos - FAV Valinhos, setembro de 2005. Programação Estrutura II Linguagem C. Prof. Dr. Marcelo Augusto Cicogna. CONTEÚDO 2. AULA X - ADM. Prof. Dr. Marcelo Augusto Cicogna. ¾ Nessa Aula z. Alocação Estática x Alocação Dinâmica. z. Operador sizeof. z. Funções: malloc e free. z. Alocação de Matrizes. z. Exercícios. CCT ©2005 FAV - Classificação & Pesquisa. Pesquisa.. 128-137.

(2) ALOCAÇÃO DINÂMICA DE MEMÓRIA 3. AULA X - ADM. ¾ Alocação Dinâmica x Estática Considere a seguinte declaração de variáveis:. Prof. Dr. Marcelo Augusto Cicogna. int a[10 ]; a[10]; Neste caso, estamos fazendo uma alocação estática de variáveis na memória, isto é, durante todo o tempo de execução do programa estas variáveis permanecerão fixas na memória. Desse modo, não podem ser redimensionadas durante a execução do programa. Alem disso, não consideramos o fato de que a memória é um recurso limitado. O que acontecerá se fizermos a declaração da matriz abaixo? Existirá memória suficiente? double a[10000 ][10000 10000]; ]; a[10000][ Uma alternativa a este método, é a alocação dinâmica. dinâmica. Neste caso, podemos alocar variáveis na memória em tempo de execução e de acordo com as necessidades. Este recurso está fortemente baseado no conceito de ponteiros. ponteiros. Alocação dinâmica é um dos recursos mais poderosos da linguagem C. Veremos a seguir as principais funções de alocação dinâmica da linguagem C.. ©2005 FAV - Classificação & Pesquisa. Pesquisa.. ALOCAÇÃO DINÂMICA DE MEMÓRIA 4. AULA X - ADM. Prof. Dr. Marcelo Augusto Cicogna. ¾ Os 3 Mandamentos da ADM: z. 1: “Não esquecerás de liberar a memória alocada por ti”. z. 2: “Não acessarás um ponteiro não inicializado”. z. 3: “Aprenderás e respeitarás os dois primeiros mandamentos em prol da integridade dos sistemas rodando em memória, seja em Windows ou Linux” Linux”. ©2005 FAV - Classificação & Pesquisa. Pesquisa..

(3) ALOCAÇÃO DINÂMICA DE MEMÓRIA 5. AULA X - ADM. ¾ sizeof() sizeof(). ¾ Exemplo:. Alloc_01. #include <stdio.h>. Prof. Dr. Marcelo Augusto Cicogna. Em linguagem C, existe um operador que nos permite determinar o espaço alocado em memória por uma variável.. int main() { int a; float b; double c; char d; printf("Neste computador...\n"); printf("int : %2d\n", sizeof(a)); printf("float : %2d\n", sizeof(b)); printf("double: %2d\n", sizeof(c)); printf("char : %2d\n", sizeof(d));. ¾ Exemplo int a = 10; 10; printf( printf(“%d”, “%d”, sizeof(a)); sizeof(a)); ¾ Observação: Observação: embora pareça uma função, sizeof() sizeof() é um operador da linguagem C.. return (0); }. ©2005 FAV - Classificação & Pesquisa. Pesquisa.. ALOCAÇÃO DINÂMICA DE MEMÓRIA 6. AULA X - ADM. ¾ sizeof() sizeof(). ¾ Exemplo:. Alloc_01. #include <stdio.h>. Prof. Dr. Marcelo Augusto Cicogna. Esse operador permite, também, determinar o tamanho de tipos definidos pelo usuário.. ©2005 FAV - Classificação & Pesquisa. Pesquisa.. struct TStruct { int vet[10]; }; int main() { struct TStruct e; printf("Neste computador...\n"); printf("TStruct : %2d\n", sizeof(e)); return (0); }.

(4) ALOCAÇÃO DINÂMICA DE MEMÓRIA 7. AULA X - ADM. ¾ sizeof() sizeof(). ¾ Exemplo:. Alloc_01. Prof. Dr. Marcelo Augusto Cicogna. #include <stdio.h>. Esse operador permite, também, determinar o tamanho de ponteiros para os tipos padrão da linguagem e para os tipos definidos pelo usuário. ¾ Observação: Observação: em linguagem C os ponteiros ocupam o mesmo espaço em memória. O código ao lado permite descobrir quantos bytes um ponteiro ocupa em seu computador.. int main() { int* a; float* b; double* c; char* d; struct TStruct* e; printf("Neste computador...\n"); printf("int* : %2d\n", sizeof(a)); printf("float* : %2d\n", sizeof(b)); printf("double* : %2d\n", sizeof(c)); printf("char* : %2d\n", sizeof(d)); printf("TStruct*: %2d\n", sizeof(e)); return (0); }. ©2005 FAV - Classificação & Pesquisa. Pesquisa.. ENDEREÇOS DE MEMÓRIA 8. AULA X - ADM. ¾ malloc() malloc() void* void* malloc( malloc(size_t size_t nbytes); nbytes);. Prof. Dr. Marcelo Augusto Cicogna. Em stdlib.h stdlib.h a função malloc() malloc() aloca uma região de memória com nbytes. nbytes. ¾ Exemplo int* int* a; a = malloc( malloc(10); 10); ¾ Observação: Observação: por compatibilidade, usa-se sizeof() sizeof() para determinar nbytes. nbytes.. ©2005 FAV - Classificação & Pesquisa. Pesquisa.. ¾ Exemplo:. Alloc_02. #include <stdlib.h> int main() { unsigned int size; int* vet; int fmt; /* Tamanho em tempo de execução. */ scanf("%d", &size); /* Alocação dinâmica de memória. */ vet = malloc(size * sizeof(int)); if (vet) { for (i=0; i<size; i++) vet[i] = rand() % size + 1; ... /* Liberar memória alocada */ free(vet); } return (0); }. 2° Mandamento. 1° Mandamento.

(5) ENDEREÇOS DE MEMÓRIA 9. AULA X - ADM. ¾ free() free(). Prof. Dr. Marcelo Augusto Cicogna. void free( free(void* void* p);. Em stdlib.h stdlib.h a função free() free() libera para o sistema a região de memória alocada com malloc() malloc().. ¾ Exemplo int* int* a = malloc( malloc(10); 10); free(a); free(a); ¾ Observação: como os recursos não são infinitos, é importante testar o resultado de malloc() malloc()... ¾ Exemplo:. Alloc_02. #include <stdlib.h> int main() { unsigned int size; int* vet; int fmt; /* Tamanho em tempo de execução. */ scanf("%d", &size); /* Alocação dinâmica de memória. */ vet = malloc(size * sizeof(int)); if (vet) { for (i=0; i<size; i++) vet[i] = rand() % size + 1; ... /* Liberar memória alocada */ free(vet); } return (0); }. 2° Mandamento. 1° Mandamento. ©2005 FAV - Classificação & Pesquisa. Pesquisa.. ALOCAÇÃO DINÂMICA DE MEMÓRIA 10. Prof. Dr. Marcelo Augusto Cicogna. ¾ Alocação de Matrizes Como vimos nos exemplos anteriores, podemos usar as funções malloc() malloc() e free() free() para alocar memória para vetores. No caso de matrizes, devemos apenas levar em consideração que temos duas dimensões (linhas e colunas). Desse modo, devemos primeiro alocar as linhas da matriz e, em. seguida, alocar para cada linha alocar o número de colunas da matriz correspondente.. ©2005 FAV - Classificação & Pesquisa. Pesquisa.. ¾ Exemplo:. AULA X - ADM. Alloc_03. int main() { unsigned int lin, col; int i, j; int** mat; lin = col = 3; mat = malloc(lin * sizeof(int*)); if (mat == NULL) { printf(“Erro na alocacao das linhas!"); exit(1); } for (i=0; i<lin; i++) { mat[i] = malloc(col * sizeof(int)); if (mat[i] == NULL) { printf(“Erro na alocacao das colunas!"); exit(1); } } /* Libera a memória alocada p/ as colunas*/ for (i=0; i<lin; i++) free(mat[i]); free(mat); /*Libera as linhas*/ return(0); }.

(6) EXERCÍCIOS 11. AULA X - ADM. Prof. Dr. Marcelo Augusto Cicogna. ¾. 01) Escreva um programa para calcular a soma de duas matrizes quadradas de ordem n. n. A dimensão e os elementos não são definidas no código. Para facilitar a entrada dos dados, leia as informações a partir de um arquivo texto. Dica: organize o programa em funções (leitura, alocação, impressão, etc.). Matrizes 3 1 5 3 4 5 6 4 2 8 3 5 9 9 7 3 8 9 6. ¾. 02) Baseado no exercício anterior, escreva um programa para calcular o produto de duas matrizes quadradas de ordem n. n.. ©2005 FAV - Classificação & Pesquisa. Pesquisa..

(7)

Referências

Documentos relacionados

PROVA DE INGRESSO ‐ PÓS‐GRADUAÇÃO EM FÍSICA  ÁREA: FÍSICA APLICADA  OPÇÃO: FÍSICA BIOMOLECULAR  20 de outubro de 2009 

O livro é estruturado com a introdução e cinco capítulos, denominados respectivamente: O princípio constitucional da dignidade da pessoa humana e os povos indígenas;

Quando o falante utiliza padrões de sua língua materna para as produções na língua-alvo, com vistas a produzir, por exemplo, sons que não fazem parte do repertório

1.3 A proposta deverá ser impressa e entregue, rubricada em todas as folhas, datadas e assinadas pelo representante legal da empresa participante. Nádja Silva e/ou

Uma maneira viável para compreender uma reação química é através da conservação das massas, isso porque numa abordagem mais ampla, como demonstra no livro

Ainda na última parte da narrativa, outro “milagre” acontece: Grenouille apa- rece, de súbito, em meio ao povo, destampa uma pequena garrafa que trazia consi- go, borrifa-se com

Our contributions are: a set of guidelines that provide meaning to the different modelling elements of SysML used during the design of systems; the individual formal semantics for

Esta pesquisa oferece uma análise do processo de manejo comunitário implementado por um grupo de pescadores indígenas sobre a atividade pesqueira ornamental, e