Skip to content

Instantly share code, notes, and snippets.

@brun0xff
Created May 15, 2017 21:34
Show Gist options
  • Save brun0xff/5c2bf6b7bc8d4dca70f85bb19dc3ce70 to your computer and use it in GitHub Desktop.
Save brun0xff/5c2bf6b7bc8d4dca70f85bb19dc3ce70 to your computer and use it in GitHub Desktop.
//aloca.h
#ifndef ALOCA_H
#define ALOCA_H
#define FIRSTFIT 0
#define BESTFIT 1
#define NEXTFIT 2
#define MAGIC_NUMBER 61616
#define OFFSET_BYTE 4
typedef struct __node_t {
char * addr;
int len;
struct __node_t *next;
struct __node_t *prev;
}node_t;
//TAMANHO MÁXIMO DE ALOCACAO: 65535 (maior unsigned short)
class meualoc
{
public:
char * memoria; //char* pois eh byte a byte
node_t ** free_list;
int politicaMem;
int tamanhoMemoria;
int len_fl;
public:
//tamanhoMemoria vai definir o tamanho da memória que o alocador vai utilizar
//politicaMem define como escolher o bloco de onde saira a memória
meualoc(int tamanhoMemoria, int politicaMem);
//Pega um pedaco da variavel memoria e aloca, retornando o
//ponteiro para o comeco dessa regiao e atualizando a lista de livres.
char *aloca(unsigned short int tamanho);
//Verifica se a posicao dada pelo ponteiro esta alocada
char* verifica(char* ponteiro, int posicao=0);
//Libera o espaco ocupado na posicao, de forma analoga ao free.
//Ou seja, liberar toda a memoria alocada para este ponteiro na funcao aloca.
int libera(char* ponteiro);
//Imprime o numero de elementos na lista de vazios,
//o maior e a media de tamanhos dos blocos vazios
void imprimeDados();
int coalescing(node_t * block_left, node_t * block_ptr, node_t * block_right);
node_t * isFreeLeft(char * ponteiro);
node_t * isFreeRight(char * ponteiro);
void setUnsignedShortIntToChar(char * mm, unsigned short n);
unsigned short int getCharToUnsignedShortInt(char * mm);
~meualoc();
};
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment