Escolar Documentos
Profissional Documentos
Cultura Documentos
Trabalho Prtico 1
Alocao de Memria
Valor: 15 pontos
Prazo: 09/10/2014
O objetivo do trabalho implementar um mecanismo de alocao dinmica de memria semelhante
ao oferecido pelo tradicional comando malloc, disponvel na biblioteca padro das linguagens C e
C++. Para fazer uma distino clara entre as funes deste trabalho e as da biblioteca padro, vamos
denominar a nova funo de alocao como valloc.
Em vez de alocar memria dinmica a partir do heap, o espao que ser gerenciado pela funo
valloc ser formado com base em um vetor global, dimensionado estaticamente. A partir disso, a
funo valloc dever alocar e liberar blocos de memria do vetor, respeitando a lgica de
funcionamento semelhante ao malloc e ainda dentro dos seguintes princpios:
Naturalmente, sendo construda para funcionar baseada em um vetor global esttico, a funo valloc
no compartilhar o espao de memria com outros processos em execuo na mquina, como o
caso de malloc. A funo valloc ter a seguinte assinatura:
void *valloc(size_t size);
Quando um bloco de memria tem sua alocao solicitada, a funo valloc deve determinar se
existe algum segmento livre do vetor com a capacidade necessria. Se no houver, a funo
retornar NULL. Se houver, o bloco reservado, e seu endereo inicial retornado. A alocao
deve considerar blocos de 1 byte, no havendo alinhamento de endereos nem paginao de blocos.
Outras funes semelhantes s tradicionais sero necessrias (consultar a documentao de C para
ver o comportamento esperado). Criar as funes e inseri-las no header para uso pblico:
void vfree(void *p);
void *vcalloc(size_t nitems, size_t size);
void *vrealloc(void *p, size_t size);
O vetor global ter tamanho mximo igual a 1.024.576 bytes, podendo ser instanciado da seguinte
maneira:
#define MAX_MEM 1024576
extern unsigned char MEM[MAX_MEM];
Onde, na segunda linha, POS indica a posio do inicio do primeiro bloco de memria, que foi
alocado com tamanho 20 e est atualmente sendo utilizada. J a terceira linha indica que a partir da
posio 20 existe um bloco contiguo de tamanho 1.024.556 livre.
Testes e avaliao
Dever ser produzido obrigatoriamente um arquivo de header com o nome valloc.h contendo
a assinatura das funes indicadas, de modo que este possa ser integrado ao programa principal,
como pode ser visto no arquivo main.c fornecido.
As funes tero seu funcionamento avaliado pela execuo do conjunto de instrues interpretadas
pela funo main (ver anexo), que por sua vez far a chamada das funes fornecidas por sua
implementao. Dessa forma uma srie de alocaes, realocaes e liberaes de memria sero
realizadas, bem como o acompanhamento do status da memria. A sintaxe e o comportamento das
novas funes devero ser idnticos aos de malloc, free, calloc e realloc.
A sada ser comparada com a de uma implementao padro dentro do Prtico. Cada teste do
Prtico composto por uma sequncia de instrues, que tem seu formato e sintaxe descrita no
anexo. Sua sada ser correspondente a uma srie de chamadas da funo
imprime_status_memoria, mencionada anteriormente. Ser fornecido um exemplo de
entrada e sada no Moodle.
Comentrios Gerais:
1. Comece a fazer este trabalho logo, enquanto o problema est fresco na memria e o prazo
para termin-lo est to longe quanto jamais poder estar.
2. Clareza, indentao e comentrios no programa tambm sero avaliados.
3. O trabalho individual.
4. A submisso ser feita pelo Prtico (aeds.dcc.ufmg.br)
5. O Prtico desconsidera espaos, quebras de linha e tabulaes a mais de sua sada, portanto
no necessrio alinhar de forma exata estes itens sada padro fornecida.
6. Trabalhos copiados, comprados, doados, etc. sero penalizados conforme anunciado.
7. Penalizao por atraso: (2d 1) pontos, onde d o nmero de dias de atraso.
Referncias
[1] A malloc tutorial: documento que explica o funcionamento completo da funo malloc e
mostra sua implementao em C, para o caso real (memria dinmica).
www.inf.udec.cl/~leo/Malloc_tutorial.pdf
Anexo I Sintaxe interpretador
O interpretador utiliza as seguintes instrues:
VAR <numero de variveis>
Indica ao interpretador o nmero de variveis que devem ser alocadas pelo programa. Esse
comando obrigatrio para a execuo do programa.
VALLOC <tamanho do bloco> V<identificador da varivel>
VCALLOC <tamanho do bloco> V<identificador da varivel>
VREALLOC <tamanho do bloco> V<identificador da varivel>