Forráskód Böngészése

Memory space awareness for sys_alloc().

Ioannis Koutras 13 éve
szülő
commit
d52ea914eb
3 módosított fájl, 24 hozzáadás és 0 törlés
  1. 4 0
      private-include/sys_alloc.h
  2. 4 0
      src/custom_malloc.c
  3. 16 0
      src/sys_alloc.c

+ 4 - 0
private-include/sys_alloc.h

@@ -1,6 +1,10 @@
 #ifndef SYS_ALLOC_H
 #define SYS_ALLOC_H
 
+#ifndef WITH_MEMORY_SPACE_AWARENESS
 void *sys_alloc(heap_t *heap, size_t size);
+#else
+void *sys_alloc(allocator_t *allocator, heap_t *heap, size_t size);
+#endif /* WITH_MEMORY_SPACE_AWARENESS */
 
 #endif /* SYS_ALLOC_H */

+ 4 - 0
src/custom_malloc.c

@@ -73,7 +73,11 @@ void * custom_ahmalloc(allocator_t* allocator, heap_t* heap, size_t size) {
     }
 
     if(ptr == NULL) {
+#ifdef WITH_MEMORY_SPACE_AWARENESS
+        ptr = sys_alloc(allocator, heap, size);
+#else
         ptr = sys_alloc(heap, size);
+#endif /* WITH_MEMORY_SPACE_AWARENESS */
     }
 
     set_requested_size(ptr, size);

+ 16 - 0
src/sys_alloc.c

@@ -11,7 +11,12 @@
 #include "sys_alloc.h"
 #include "block_header.h"
 
+#ifndef WITH_MEMORY_SPACE_AWARENESS
 void *sys_alloc(heap_t *heap, size_t size) {
+#else
+void *sys_alloc(allocator_t *allocator, heap_t *heap, size_t size) {
+#endif /* WITH_MEMORY_SPACE_AWARENESS */
+
     size_t allocation_size;
     void *ptr;
 
@@ -21,11 +26,22 @@ void *sys_alloc(heap_t *heap, size_t size) {
 
     allocation_size = req_padding(size) + HEADER_SIZE;
 
+#ifndef WITH_MEMORY_SPACE_AWARENESS
     ptr = sbrk((int) allocation_size);
     if(ptr == (void *) -1) {
         printf("sbrk problem for size of: %zu\n", allocation_size);
         printf( "Error on sbrk: %s\n", strerror( errno ) );
     }
+#else
+    if(allocator->remaining_size >= allocation_size) {
+        ptr = allocator->border_ptr;
+        allocator->border_ptr = (char *) allocator->border_ptr + allocation_size;
+        allocator->remaining_size -= allocation_size;
+    } else {
+        printf("No more free space.\n");
+    }
+#endif /* WITH_MEMORY_SPACE_AWARENESS */
+
     ptr = (void *) ((char *) ptr + HEADER_SIZE);
 
     set_size(ptr, req_padding(size));