From 03d28ffd8fc771c36e8c59aecf976b16e46774ee Mon Sep 17 00:00:00 2001 From: PEDRO MARTINS E SA <pmes18@urquell> Date: Fri, 22 Nov 2019 11:01:36 -0300 Subject: [PATCH] versao definitiva --- bin/meu_malloc.o | Bin 5360 -> 0 bytes includes/meu_malloc.h | 7 +++++++ lib/libmeu_malloc.a | Bin 5608 -> 0 bytes makefile | 10 +++++++--- src/meu_malloc.s | 9 +-------- teste | Bin 12952 -> 0 bytes 6 files changed, 15 insertions(+), 11 deletions(-) delete mode 100644 bin/meu_malloc.o delete mode 100644 lib/libmeu_malloc.a delete mode 100755 teste diff --git a/bin/meu_malloc.o b/bin/meu_malloc.o deleted file mode 100644 index 1efa1bd405d3b867004aff8b8761dd9b01b345f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5360 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 HVh%n9G;z?Y diff --git a/includes/meu_malloc.h b/includes/meu_malloc.h index 53a4615..18fba6b 100644 --- a/includes/meu_malloc.h +++ b/includes/meu_malloc.h @@ -1,18 +1,25 @@ #ifndef __MEU_MALLOC__ #define __MEU_MALLOC__ +//inicia o alocador chamando a brk e atribuindo um valor pre determinado void iniciaAlocador(); +//finaliza o alocador voltando a heap para o seu inicio void finalizaAlocador(); +//Pede mais espaco na heap ao sistema operacional quando necessario void aloca_espaco(int tam_alloc); +//Aloca o ponteiro na heap void* alocaMem(int tam_alloc); +//rearranja os elementos dentro da heap liberando espacos desnecessarios void arruma_heap(); +//libera o ponteiro da heap void liberaMem(void* bloco); +//escreve o estado atual da heap void print_mapa(); #endif \ No newline at end of file diff --git a/lib/libmeu_malloc.a b/lib/libmeu_malloc.a deleted file mode 100644 index 7acda28347d161f4c2d02e5220ed1e8c21b86684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5608 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 b#q>|<C}{4Q>wU<F={I=%msn30iaGcn)t?MN diff --git a/makefile b/makefile index 99920b2..5bd6fcc 100644 --- a/makefile +++ b/makefile @@ -1,21 +1,22 @@ -###########COMPILADORES############## +############COMPILADORES############### GCC = gcc AR = ar AS = as -#########DIRETORIOS CRIADOS########### +##########DIRETORIOS CRIADOS########### INC=./includes SRC=./src BIN=./bin LIB=./lib +#################FLAGS################# LIBFLAGS=-lmeu_malloc -L$(LIB) INCFLAGS=-I$(INC) CFLAGS=-Wall -g -no-pie -fno-pie ARFLAGS=rcs -#LIGACOES +##############LIGACOES################# build: diretorios libmeu_malloc.a $(GCC) $(CFLAGS) $(INCFLAGS) $(SRC)/teste.c -o teste $(LIBFLAGS) @@ -25,6 +26,8 @@ libmeu_malloc.a: meu_malloc.o meu_malloc.o: $(AS) $(SRC)/meu_malloc.s -o $(BIN)/meu_malloc.o -g + +########CRICACAO DE DIRETORIOS######### diretorios: @echo "Criando Diretorios \n" @@ -36,6 +39,7 @@ diretorios: mkdir $(LIB); \ fi +####LIMPA OS DIRETORIOS E ARQUIVOS##### clean: @echo "Limpando Diretorios\n" diff --git a/src/meu_malloc.s b/src/meu_malloc.s index 4038e13..950e382 100644 --- a/src/meu_malloc.s +++ b/src/meu_malloc.s @@ -7,9 +7,7 @@ str4: .string "*" str5: .string "INICIANDO O ALOCADOR!\n" str6: .string "ENTRADA INVALIDA!\n" - pula_Linha: .string "\n" - - flag: .string "%d" + pula_Linha: .string "\n"# .section .bss .equ ALOCADOR, 1040 @@ -139,7 +137,6 @@ alocaMem: jmp fim_if_aloca_mem2 fim_if_aloca_mem2: jmp fim_while_aloca_mem - fim_if_while_aloca_mem: addq $16, 8(%rbx) movq 8(%rbx), %r10 @@ -241,10 +238,6 @@ print_mapa: jmp for_cabecalho fim_for_cabecalho: - movq $flag,%rdi - movq 8(%rbx),%rsi - call printf - cmpq $LIVRE, (%rbx) jne else_if_while movq $0, -8(%rbp) #i = 0 diff --git a/teste b/teste deleted file mode 100755 index df0132ad4d2865cb6d0e7bde28bb0d15e3072564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12952 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 -- GitLab