Next: Código-fonte: Exemplo de Utilização
Up: Códigos-fonte
Previous: Código-fonte: Um Exemplo Simples
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: Código-fonte: Exemplo de Utilização
Up: Códigos-fonte
Previous: Código-fonte: Um Exemplo Simples
rafael@safecore.net