next up previous contents index
Next: Código-fonte: Exemplo de Utilização Up: Códigos-fonte Previous: Código-fonte: Um Exemplo Simples

Código-fonte: Exemplo de Utilização de Memória  


2517:454791 /* * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the License); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an AS IS basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is the BananaKernel test implementation. * * The Initial Developer of the Original Code is the BananaKernel Developers * Group. Portions created by BananaKernel are Copyright (C) 2004 * BananaKernel Developers Group. All Rights Reserved. * * Contributor(s): */

/* Esta funcao testa o gerenciador de memoria. Retorna 0 em sucesso. */
int  teste_01MMteste_01MM() { char *memoria[10]; char *memoria_longa[10]; int i, j; int disponivel = -1;
/* teste bnnk_malloc() */
bnnk_memstat();
for (i = 0; i < 10; i++) { /* para cada posicao do vetor... */ /* * cria um a posicao de memoria para conter (10*i)+10 * caracteres */ memoria[i] = (char *) bnnk_malloc(sizeof(char) * ((10 * i) + 10)); /* Faz uma pausa na primeira chamada do bnnk_malloc() */ if (i == 0) { printf(Pressione qualquer tecla para continuar.\n); getchar(); } if (!memoria[i]) { /* se nao conseguiu um bloco */ return -1; /* retorna -1 indicando um erro no * bnnk_malloc() */ } }
/* teste de escrita */
for (i = 0; i < 10; i++) { /* para cada posicao do vetor... */ /* para cada char no bloco... */ for (j = 0; (j < ((10 * i) + 10) - 1) || (j == 0); j++) { /* preenche com 1 */ memcpy(((memoria[i] + j)), 1, sizeof(char)); } memcpy((memoria[i] + j), \0, 1); /* preenche a ultima * posicao com \0, * indicando o fim da * string */ /* imprime a string */ printf(Numero de characteres: %i\n, j); printf(Caracteres: %s\n, memoria[i]); }
printf(Pressione qualquer tecla para continuar.\n); getchar();
/* teste bnnk_realloc() */
/* realocar os blocos 0, 5 e 9 */ memoria[0] = (char *) bnnk_realloc(memoria[0], sizeof(char) * 150); memoria[5] = (char *) bnnk_realloc(memoria[5], sizeof(char) * 150); memoria[9] = (char *) bnnk_realloc(memoria[9], sizeof(char) * 150);
/* Faz uma pausa na chamada do bnnk_realloc() */ printf(Pressione qualquer tecla para continuar.\n); getchar();

/* verifica se os blocos foram realocados */ /* se nao foram criados */ if (!memoria[0] || !memoria[5] || !memoria[9]) return -2; /* retorna -2 indicando um erro no * bnnk_realloc() */
/* imprime esses blocos para garantir que o conteudo foi copiado */ printf(Caracteres: %s\n, memoria[0]); printf(Caracteres: %s\n, memoria[5]); printf(Caracteres: %s\n, memoria[9]);
printf(Pressione qualquer tecla para continuar.\n); getchar();
/* teste de bnnk_avail() */ disponivel = bnnk_avail(); if (disponivel < 0) /* se a memoria estah negativa... */ return -4; /* retorna -4 indicando um erro no * bnnk_avail() */ printf(Memoria disponivel: %i\n, disponivel);
printf(Pressione qualquer tecla para continuar.\n); getchar();
/* teste de bnnk_free() */ i = bnnk_free(memoria[5]); /* libera o bloco na posicao 5 */ if (i == -1) /* se bnnk_free() retornou -1 */ return -3; /* retorna -3 indicando um erro no * bnnk_free() */
/* teste de bnnk_avail() */ disponivel = bnnk_avail(); if (disponivel < 0) /* se a memoria estah negativa... */ return -4; /* retorna -4 indicando um erro no * bnnk_avail() */ printf(Memoria disponivel: %i\n, disponivel);
printf(Pressione qualquer tecla para continuar.\n); getchar();
/* teste bnnk_getsize() */ i = bnnk_getsize(memoria[2]); /* recupera o tamanho do bloco na * posicao 2 */ if (i != (sizeof(char) * ((10 * 2) + 10))) /* se o tamanho do bloco * eh diferente do * tamanho alocado para * ele... */ return -5; /* retorna -5 indicando um erro no * bnnk_getsize() */
/* teste de alocacao de grandes pedacos de memoria */ for (i = 0; i < 10; i++) { /* para cada posicao do vetor... */ /* * cria um a posicao de memoria para conter (10*i)+10 * caracteres */ memoria_longa[i] = (char *) bnnk_malloc(sizeof(char) * ((1000 * i) + 10)); if (!memoria_longa[i]) { /* se nao conseguiu um bloco */ return -1; /* retorna -1 indicando um erro no * bnnk_malloc() */ } } bnnk_memstat();
for (i = 0; i < 10; i++) { /* para cada posicao do vetor... */ if ((bnnk_free(memoria_longa[i])) == -1) return -3; bnnk_memstat(); }
return 0; /* retorna 0 indicando sucesso */ }


next up previous contents index
Next: Código-fonte: Exemplo de Utilização Up: Códigos-fonte Previous: Código-fonte: Um Exemplo Simples
rafael@safecore.net