Browse Source

Renamed dmm_init() to initialize_allocator(), added support for memory space aware allocations, moved source code to src directory.

Ioannis Koutras 13 years ago
parent
commit
1f7bb37a63

+ 1 - 43
CMakeLists.txt

@@ -17,49 +17,7 @@ configure_file (
 include_directories("${PROJECT_BINARY_DIR}")
 
 add_subdirectory(include)
-
-#add_subdirectory(src)
-
-set(DMMLIB_PUBLIC_INCLUDE_DIRS
-  ${CMAKE_SOURCE_DIR}/include
-  CACHE INTERNAL "dmmlib public include directories"
-)
-
-set(DMMLIB_PRIVATE_INCLUDE_DIRS
-	${CMAKE_SOURCE_DIR}/private-include
-	${CMAKE_BINARY_DIR}
-)
-
-set(DMMLIB_SHARED_LIBRARY
-  dmm_shared
-  CACHE INTERNAL "dmmlib shared library"
-)
-
-set(dmmlib_SRCS
-	block_header.c
-	coalesce.c
-	custom_free.c
-	custom_malloc.c
-	dmm_adaptor.c
-	dmm_init.c
-	other.c
-	sys_alloc.c
-)
-
-if (HAVE_LOCKS)
-	find_package (Threads)
-	set(dmmlib_SRCS
-		${dmmlib_SRCS}
-		posix_lock.c
-	)
-endif (HAVE_LOCKS)
-
-include_directories(
-	${DMMLIB_PUBLIC_INCLUDE_DIRS}
-	${DMMLIB_PRIVATE_INCLUDE_DIRS}
-)
-
-add_library(${DMMLIB_SHARED_LIBRARY} SHARED ${dmmlib_SRCS})
+add_subdirectory(src)
 
 if (WITH_EXAMPLES)
   add_subdirectory(examples)

+ 1 - 0
DefineOptions.cmake

@@ -1,2 +1,3 @@
 option(HAVE_LOCKS "Build with POSIX locking mechanisms" ON)
 option(WITH_EXAMPLES "Build with examples" OFF)
+option(WITH_MEMORY_SPACE_AWARENESS "Build with memory space awareness" OFF)

+ 1 - 0
dmm_config.h.in

@@ -1 +1,2 @@
 #cmakedefine HAVE_LOCKS
+#cmakedefine WITH_MEMORY_SPACE_AWARENESS

+ 4 - 0
include/dmmlib/heap.h

@@ -97,6 +97,10 @@ typedef struct heap_s {
 typedef struct allocator_s {
 	heap_t heaps[NUM_HEAPS]; /**< \brief The heaps that the allocator manages. */
 	bool initialized; /**< \brief Initialization flag of the allocator. */
+#ifdef WITH_MEMORY_SPACE_AWARENESS
+	void *border_ptr;
+	size_t remaining_size;
+#endif /* WITH_MEMORY_SPACE_AWARENESS */
 } allocator_t;
 
 #endif /* HEAP_H */

+ 8 - 0
private-include/initialize_allocator.h

@@ -0,0 +1,8 @@
+#include <dmmlib/heap.h>
+#include "dmm_config.h"
+
+#ifdef WITH_MEMORY_SPACE_AWARENESS
+void initialize_allocator(allocator_t *allocator, void *starting_address, size_t size);
+#else
+void initialize_allocator(allocator_t *allocator);
+#endif /* WITH_MEMORY_SPACE_AWARENESS */

+ 44 - 0
src/CMakeLists.txt

@@ -0,0 +1,44 @@
+project (dmmlib-library C)
+
+set(DMMLIB_PUBLIC_INCLUDE_DIRS
+  ${CMAKE_SOURCE_DIR}/include
+  CACHE INTERNAL "dmmlib public include directories"
+)
+
+set(DMMLIB_PRIVATE_INCLUDE_DIRS
+	${CMAKE_SOURCE_DIR}/private-include
+	${CMAKE_BINARY_DIR}
+)
+
+set(DMMLIB_SHARED_LIBRARY
+  dmm_shared
+  CACHE INTERNAL "dmmlib shared library"
+)
+
+set(dmmlib_SRCS
+	block_header.c
+	coalesce.c
+	custom_free.c
+	custom_malloc.c
+	dmm_adaptor.c
+	other.c
+	initialize_allocator.c
+	sys_alloc.c
+)
+
+if (HAVE_LOCKS)
+	find_package (Threads)
+	set(dmmlib_SRCS
+		${dmmlib_SRCS}
+		posix_lock.c
+	)
+endif (HAVE_LOCKS)
+
+include_directories(
+	${DMMLIB_PUBLIC_INCLUDE_DIRS}
+	${DMMLIB_PRIVATE_INCLUDE_DIRS}
+)
+
+add_library(${DMMLIB_SHARED_LIBRARY} SHARED ${dmmlib_SRCS})
+
+

block_header.c → src/block_header.c


coalesce.c → src/coalesce.c


custom_free.c → src/custom_free.c


+ 1 - 1
custom_malloc.c

@@ -21,7 +21,7 @@ void * custom_ahmalloc(allocator_t* allocator, heap_t* heap, size_t size) {
     if(allocator == NULL) {
         allocator = &systemallocator;
         if(allocator->initialized != true) {
-            dmm_init(allocator);
+            initialize_allocator(allocator);
         }
     }
 

dmm_adaptor.c → src/dmm_adaptor.c


+ 19 - 2
dmm_init.c

@@ -3,9 +3,13 @@
 #ifdef HAVE_LOCKS
 #include <pthread.h>
 #endif /* HAVE_LOCKS */
-#include "dmm_init.h"
+#include "initialize_allocator.h"
 
-void dmm_init(allocator_t *allocator) {
+#ifdef WITH_MEMORY_SPACE_AWARENESS
+void initialize_allocator(allocator_t *allocator, void *starting_address, size_t size) {
+#else
+void initialize_allocator(allocator_t *allocator) {
+#endif /* WITH_MEMORY_SPACE_AWARENESS */
     int i;
     heap_t *current_heap;
     maptable_node_t *maptablenode;
@@ -39,7 +43,18 @@ void dmm_init(allocator_t *allocator) {
     // 2 last ones with 64 and 256 (2 fixed lists per heap)
     // 2 * 4 + 2 * 2 = 12 maptable nodes
     current_heap = &allocator->heaps[0];
+
+#ifndef WITH_MEMORY_SPACE_AWARENESS
     maptablenode = (maptable_node_t *) sbrk((int)(12*(sizeof(maptable_node_t))));
+#else
+    if(12*(sizeof(maptable_node_t)) < size) {
+        maptablenode = (maptable_node_t *) sbrk((int)(12*(sizeof(maptable_node_t))));
+        allocator->border_ptr = starting_address + 12*(sizeof(maptable_node_t));
+        allocator->remaining_size = size - 12*(sizeof(maptable_node_t));
+    } else {
+        // Houston, we have a problem
+    }
+#endif /* WITH_MEMORY_SPACE_AWARENESS */
 
     maptablenode->size = 32;
     maptablenode->fixed_list_head = NULL;
@@ -87,5 +102,7 @@ void dmm_init(allocator_t *allocator) {
     (maptablenode+1)->size = 256;
     (maptablenode+1)->fixed_list_head = NULL;
     (maptablenode+1)->next = NULL;
+
+    allocator->initialized = true;
 }
 

other.c → src/other.c


posix_lock.c → src/posix_lock.c


sys_alloc.c → src/sys_alloc.c