clean: malloc small tiny dry
This commit is contained in:
parent
771d7fbce3
commit
9be740f2c0
79
src/malloc.c
79
src/malloc.c
|
@ -14,9 +14,7 @@ t_zone *create_new_zone(size_t size) {
|
||||||
return zone;
|
return zone;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *malloc_tiny(size_t size) {
|
void *malloc_block(size_t size, size_t zone_size, t_zone *zone) {
|
||||||
t_zone *zone = g_zones.tiny_zones;
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
t_block *curr = zone->head;
|
t_block *curr = zone->head;
|
||||||
if (curr == NULL) {
|
if (curr == NULL) {
|
||||||
|
@ -27,16 +25,6 @@ void *malloc_tiny(size_t size) {
|
||||||
}
|
}
|
||||||
zone->head = (t_block *)addr;
|
zone->head = (t_block *)addr;
|
||||||
curr = zone->head;
|
curr = zone->head;
|
||||||
/* ft_printf("addr of g_zones.tiny_zones : %p\n"
|
|
||||||
"addr of zone : %p\n"
|
|
||||||
"addr of *head %p\n"
|
|
||||||
"sizeof tzone : %d\n"
|
|
||||||
"size of tblock %d\n",
|
|
||||||
g_zones.tiny_zones,
|
|
||||||
zone,
|
|
||||||
curr,
|
|
||||||
sizeof(t_zone),
|
|
||||||
sizeof(t_block));*/
|
|
||||||
curr->size = size;
|
curr->size = size;
|
||||||
curr->free = 0;
|
curr->free = 0;
|
||||||
curr->next = NULL;
|
curr->next = NULL;
|
||||||
|
@ -53,7 +41,7 @@ void *malloc_tiny(size_t size) {
|
||||||
if ((addr + sizeof(t_block)) % 16 != 0) {
|
if ((addr + sizeof(t_block)) % 16 != 0) {
|
||||||
addr += 16 - ((addr + sizeof(t_block)) % 16);
|
addr += 16 - ((addr + sizeof(t_block)) % 16);
|
||||||
}
|
}
|
||||||
if (((size_t)zone + g_zones.tiny_zone_size) - addr >= size + sizeof(t_block) + (16 - sizeof(t_block) % 16))
|
if (((size_t)zone + zone_size) - addr >= size + sizeof(t_block) + (16 - sizeof(t_block) % 16))
|
||||||
{
|
{
|
||||||
curr->next = (t_block *)addr;
|
curr->next = (t_block *)addr;
|
||||||
curr = curr->next;
|
curr = curr->next;
|
||||||
|
@ -64,7 +52,7 @@ void *malloc_tiny(size_t size) {
|
||||||
return (void *)((char *)curr + sizeof(t_block));
|
return (void *)((char *)curr + sizeof(t_block));
|
||||||
}
|
}
|
||||||
if (zone->next == NULL) {
|
if (zone->next == NULL) {
|
||||||
zone->next = create_new_zone(g_zones.tiny_zone_size);
|
zone->next = create_new_zone(zone_size);
|
||||||
}
|
}
|
||||||
zone = zone->next;
|
zone = zone->next;
|
||||||
}
|
}
|
||||||
|
@ -73,63 +61,12 @@ void *malloc_tiny(size_t size) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *malloc_small(size_t size) {
|
void *malloc_tiny(size_t size) {
|
||||||
t_zone *zone = g_zones.small_zones;
|
return malloc_block(size, g_zones.tiny_zone_size, g_zones.tiny_zones);
|
||||||
|
}
|
||||||
|
|
||||||
while (1) {
|
void *malloc_small(size_t size) {
|
||||||
t_block *curr = zone->head;
|
return malloc_block(size, g_zones.small_zone_size, g_zones.small_zones);
|
||||||
if (curr == NULL) {
|
|
||||||
// TODO size_t should be replaced by char * for pointer arithmetic
|
|
||||||
size_t addr = ((size_t)zone + sizeof(t_zone));
|
|
||||||
if ((addr + sizeof(t_block)) % 16 != 0) {
|
|
||||||
addr += 16 - ((addr + sizeof(t_block)) % 16);
|
|
||||||
}
|
|
||||||
zone->head = (t_block *)addr;
|
|
||||||
curr = zone->head;
|
|
||||||
/*ft_printf("addr of g_zones.small_zones : %p\n"
|
|
||||||
"addr of zone : %p\n"
|
|
||||||
"addr of *head %p\n"
|
|
||||||
"sizeof tzone : %d\n"
|
|
||||||
"size of tblock %d\n",
|
|
||||||
g_zones.small_zones,
|
|
||||||
zone,
|
|
||||||
curr,
|
|
||||||
sizeof(t_zone),
|
|
||||||
sizeof(t_block));*/
|
|
||||||
curr->size = size;
|
|
||||||
curr->free = 0;
|
|
||||||
curr->next = NULL;
|
|
||||||
ft_printf("returning %p\n", (void *)((char *)(curr) + sizeof(t_block)));
|
|
||||||
return (void *)((char *)(curr) + sizeof(t_block));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
while (curr->next) {
|
|
||||||
// todo check if free and defrag
|
|
||||||
curr = curr->next;
|
|
||||||
}
|
|
||||||
// TODO size_t should be replaced by char * for pointer arithmetic
|
|
||||||
size_t addr = (size_t)curr + sizeof(t_block) + curr->size;
|
|
||||||
if ((addr + sizeof(t_block)) % 16 != 0) {
|
|
||||||
addr += 16 - ((addr + sizeof(t_block)) % 16);
|
|
||||||
}
|
|
||||||
if (((size_t)zone + g_zones.small_zone_size) - addr >= size + sizeof(t_block) + (16 - sizeof(t_block) % 16))
|
|
||||||
{
|
|
||||||
curr->next = (t_block *)addr;
|
|
||||||
curr = curr->next;
|
|
||||||
curr->size = size;
|
|
||||||
curr->free = 0;
|
|
||||||
curr->next = NULL;
|
|
||||||
ft_printf("returning %p\n", (void *)((char *)(curr) + sizeof(t_block)));
|
|
||||||
return (void *)((char *)curr + sizeof(t_block));
|
|
||||||
}
|
|
||||||
if (zone->next == NULL) {
|
|
||||||
zone->next = create_new_zone(g_zones.small_zone_size);
|
|
||||||
}
|
|
||||||
zone = zone->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ft_printf("ITS A BIG MISTAKE IF IT EVER GOES THERE WHILE TRYING TO ALLOCATE A SMALL BLOCK THAT WOULD BE A HUGE BUMMER AND WOULD MAKE THE HEADLINES OF INTERNATIONAL NEWS FOR A WEEK\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void *malloc_large(size_t size) {
|
void *malloc_large(size_t size) {
|
||||||
|
|
Loading…
Reference in New Issue