seanhalle@208: /* seanhalle@208: * Copyright 2009 OpenSourceCodeStewardshipFoundation.org seanhalle@208: * Licensed under GNU General Public License version 2 seanhalle@208: * seanhalle@208: * Author: seanhalle@yahoo.com seanhalle@208: * seanhalle@208: * Created on November 14, 2009, 9:07 PM seanhalle@208: */ seanhalle@208: seanhalle@208: #ifndef _VMALLOC_H seanhalle@208: #define _VMALLOC_H seanhalle@208: seanhalle@208: #include seanhalle@208: #include seanhalle@208: #include "VMS_primitive_data_types.h" seanhalle@208: seanhalle@209: #define SMALL_CHUNK_SIZE 32 seanhalle@209: #define SMALL_CHUNK_COUNT 4 seanhalle@209: #define LOWER_BOUND 128 //Biggest chunk size that is created for the small chunks seanhalle@209: #define BIG_LOWER_BOUND 160 //Smallest chunk size that is created for the big chunks seanhalle@209: seanhalle@209: #define LOG54 0.3219280948873623 seanhalle@209: #define LOG128 7 seanhalle@209: seanhalle@208: typedef struct _MallocProlog MallocProlog; seanhalle@208: seanhalle@208: struct _MallocProlog seanhalle@208: { seanhalle@208: MallocProlog *nextChunkInFreeList; seanhalle@208: MallocProlog *prevChunkInFreeList; seanhalle@208: MallocProlog *nextHigherInMem; seanhalle@208: MallocProlog *nextLowerInMem; seanhalle@208: }; seanhalle@208: //MallocProlog seanhalle@209: seanhalle@209: typedef struct MallocArrays MallocArrays; seanhalle@209: seanhalle@209: struct MallocArrays seanhalle@209: { seanhalle@209: MallocProlog **smallChunks; seanhalle@209: MallocProlog **bigChunks; seanhalle@209: uint64 bigChunksSearchVector[2]; seanhalle@209: void *memSpace; seanhalle@209: uint32 containerCount; seanhalle@209: }; seanhalle@209: //MallocArrays seanhalle@208: seanhalle@208: typedef struct seanhalle@208: { seanhalle@208: MallocProlog *firstChunkInFreeList; seanhalle@208: int32 numInList; //TODO not used seanhalle@208: } seanhalle@208: FreeListHead; seanhalle@208: seanhalle@208: void * seanhalle@208: VMS_int__malloc( size_t sizeRequested ); seanhalle@209: #define VMS_PI__malloc VMS_int__malloc seanhalle@209: #define VMS_WL__malloc VMS_int__malloc /*TODO: Bug -- Not protected!! */ seanhalle@209: #define VMS_App__malloc VMS_int__malloc /*TODO: Bug -- Not protected!! */ seanhalle@208: seanhalle@208: void * seanhalle@208: VMS_int__malloc_aligned( size_t sizeRequested ); seanhalle@209: #define VMS_PI__malloc_aligned VMS_int__malloc_aligned seanhalle@209: #define VMS_WL__malloc_aligned VMS_int__malloc_aligned seanhalle@208: seanhalle@208: void seanhalle@208: VMS_int__free( void *ptrToFree ); seanhalle@209: #define VMS_PI__free VMS_int__free seanhalle@209: #define VMS_WL__free VMS_int__free /*TODO: Bug -- Not protected!! */ seanhalle@209: #define VMS_App__free VMS_int__free /*TODO: Bug -- Not protected!! */ seanhalle@208: seanhalle@208: seanhalle@208: seanhalle@208: /*Allocates memory from the external system -- higher overhead seanhalle@208: */ seanhalle@208: void * seanhalle@209: VMS_ext__malloc_in_ext( size_t sizeRequested ); seanhalle@208: seanhalle@208: /*Frees memory that was allocated in the external system -- higher overhead seanhalle@208: */ seanhalle@208: void seanhalle@209: VMS_ext__free_in_ext( void *ptrToFree ); seanhalle@208: seanhalle@208: seanhalle@209: MallocArrays * seanhalle@208: VMS_ext__create_free_list(); seanhalle@208: seanhalle@208: void seanhalle@209: VMS_ext__free_free_list(MallocArrays *freeLists ); seanhalle@208: seanhalle@208: #endif