Browse Source

Option to set the default allocation size when using a system call.

Ioannis Koutras 13 years ago
parent
commit
0fd01ad138
4 changed files with 14 additions and 5 deletions
  1. 3 0
      CMakeLists.txt
  2. 1 0
      DefineOptions.cmake
  3. 3 0
      dmm_config.h.in
  4. 7 5
      src/sys_alloc.c

+ 3 - 0
CMakeLists.txt

@@ -36,6 +36,9 @@ message(STATUS "********************************************")
 message(STATUS "********** ${PROJECT_NAME} build options : **********")
 message(STATUS "Support for just one allocator: " ${WITH_SINGLE_ALLOCATOR})
 message(STATUS "OS call for memory requests: " ${WITH_SYSTEM_CALLS})
+if(NOT WITH_SYSTEM_CALLS STREQUAL "none")
+  message(STATUS "Requesting blocks multiple of: " ${SYS_ALLOC_SIZE} " bytes")
+endif(NOT WITH_SYSTEM_CALLS STREQUAL "none")
 message(STATUS "POSIX locking mechanisms: " ${HAVE_LOCKS})
 message(STATUS "Number of heaps per allocator: " ${NUM_HEAPS})
 if(BLOCKS_ORGANIZATION STREQUAL "dll")

+ 1 - 0
DefineOptions.cmake

@@ -69,6 +69,7 @@ endif (LEON3)
 
 if (LINUXTEST)
   set(WITH_SYSTEM_CALLS "mmap")
+  set(SYS_ALLOC_SIZE 4096)
   set(SORT_POLICY "fifo")
   set(SEARCH_POLICY "first")
   set(FIT_PERCENTAGE 0.6f)

+ 3 - 0
dmm_config.h.in

@@ -10,6 +10,9 @@
 #cmakedefine NO_SYSTEM_CALLS
 #cmakedefine WITH_SBRK
 #cmakedefine WITH_MMAP
+#ifndef NO_SYSTEM_CALLS
+#cmakedefine SYS_ALLOC_SIZE @SYS_ALLOC_SIZE@
+#endif /* NO_SYSTEM_CALLS */
 
 /** The number of the heaps. */
 #cmakedefine NUM_HEAPS @NUM_HEAPS@

+ 7 - 5
src/sys_alloc.c

@@ -73,12 +73,14 @@ void *sys_alloc(allocator_t *allocator, heap_t *heap, size_t size) {
 
     if(allocation_size > allocator->remaining_size) {
 #ifndef NO_SYSTEM_CALLS
-        // TODO Make the page size configurable at design time
-        if(allocation_size < 4096) {
-            allocation_size = 4096;
+        if(allocation_size < SYS_ALLOC_SIZE) {
+            allocation_size = SYS_ALLOC_SIZE;
         } else {
-            /* If allocation size is more than 4k, then request multiples of 4k */
-            allocation_size = ((size + HEADER_SIZE) / 4096 + 1) * 4096;
+            /* If allocation size is more than the default size, then request
+             * multiples of it.
+             */
+            allocation_size = ((size + HEADER_SIZE) / SYS_ALLOC_SIZE + 1) *
+                SYS_ALLOC_SIZE;
         }
 #ifdef WITH_MMAP
         if(dev_zero_fd < 0) {