projects
/
vg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
simplify gitignore
[vg.git]
/
src
/
vg
/
vg_mem.h
diff --git
a/src/vg/vg_mem.h
b/src/vg/vg_mem.h
index 47e9c93886ea67e68b668484700e1cb9eadd8b81..3a7a49da06814fe9c2c7d1d1b082ee6cc6a8ed5a 100644
(file)
--- a/
src/vg/vg_mem.h
+++ b/
src/vg/vg_mem.h
@@
-1,6
+1,7
@@
#ifndef VG_MEM_H
#define VG_MEM_H
#ifndef VG_MEM_H
#define VG_MEM_H
+#include "vg.h"
#include "vg_stdint.h"
#include "vg_platform.h"
#include "vg_stdint.h"
#include "vg_platform.h"
@@
-9,7
+10,6
@@
#define VG_MAX_ALLOCATIONS 64
#define VG_FUZZ_ALLOCATIONS
#define VG_MAX_ALLOCATIONS 64
#define VG_FUZZ_ALLOCATIONS
-#define VG_DEBUG_ALLOCATIONS
typedef struct vg_linear_allocator vg_linear_allocator;
typedef struct vg_allocation_meta vg_allocation_meta;
typedef struct vg_linear_allocator vg_linear_allocator;
typedef struct vg_allocation_meta vg_allocation_meta;
@@
-20,6
+20,7
@@
struct
*scratch;
int use_libc_malloc;
*scratch;
int use_libc_malloc;
+ u32 quota;
}
static vg_mem;
}
static vg_mem;
@@
-77,9
+78,15
@@
struct vg_linear_allocator
/* */
/* */
/* */
/* */
/* */
/* */
+
+#ifdef _WIN32
+ /* 32 bit pointers! */
+ u8 padding[ 8 ];
+#endif
};
#pragma pack(pop)
};
#pragma pack(pop)
+VG_STATIC void vg_fatal_exit_loop( const char *error );
VG_STATIC void vg_error(const char *fmt, ...);
VG_STATIC void vg_info(const char *fmt, ...);
VG_STATIC void vg_error(const char *fmt, ...);
VG_STATIC void vg_info(const char *fmt, ...);
@@
-114,10
+121,6
@@
VG_STATIC void *vg_linear_alloc( void *buffer, u32 size )
{
data = malloc( size );
{
data = malloc( size );
-#ifdef VG_DEBUG_ALLOCATIONS
- vg_info( "malloc: %p[%u]\n", data, size );
-#endif
-
vg_allocation_meta *meta = &alloc->alloc_table[ alloc->allocation_count ];
meta->type = k_allocation_type_block;
meta->data = data;
vg_allocation_meta *meta = &alloc->alloc_table[ alloc->allocation_count ];
meta->type = k_allocation_type_block;
meta->data = data;
@@
-160,10
+163,6
@@
VG_STATIC void *vg_linear_resize( void *buffer, void *data, u32 newsize )
alloc->alloc_table[ alloc->allocation_count-1 ].data = data;
alloc->last_alloc = data;
alloc->alloc_table[ alloc->allocation_count-1 ].data = data;
alloc->last_alloc = data;
-
-#ifdef VG_DEBUG_ALLOCATIONS
- vg_info( "realloc: %p (->%u)\n", data, newsize );
-#endif
return data;
}
else
return data;
}
else
@@
-215,23
+214,25
@@
VG_STATIC u32 vg_linear_get_cur( void *buffer )
return alloc->cur;
}
return alloc->cur;
}
-/* get the capacity of allocator.
TODO, should return free space?
*/
+/* get the capacity of allocator. */
VG_STATIC u32 vg_linear_get_capacity( void *buffer )
{
vg_linear_allocator *alloc = vg_linear_header( buffer );
return alloc->size;
}
VG_STATIC u32 vg_linear_get_capacity( void *buffer )
{
vg_linear_allocator *alloc = vg_linear_header( buffer );
return alloc->size;
}
+/* get the remaining size of the allocator */
+VG_STATIC u32 vg_linear_remaining( void *buffer )
+{
+ vg_linear_allocator *alloc = vg_linear_header( buffer );
+ return alloc->size - alloc->cur;
+}
+
/* yeet all memory from linear allocator */
VG_STATIC void vg_linear_clear( void *buffer )
{
vg_linear_allocator *alloc = vg_linear_header( buffer );
/* yeet all memory from linear allocator */
VG_STATIC void vg_linear_clear( void *buffer )
{
vg_linear_allocator *alloc = vg_linear_header( buffer );
-#ifdef VG_DEBUG_ALLOCATIONS
- if( alloc->flags & VG_MEMORY_SYSTEM )
- vg_info( "linear_clear on %p\n", alloc );
-#endif
-
/* libc mode we recursively free any allocations made */
if( vg_mem.use_libc_malloc && (alloc->flags & VG_MEMORY_SYSTEM) )
{
/* libc mode we recursively free any allocations made */
if( vg_mem.use_libc_malloc && (alloc->flags & VG_MEMORY_SYSTEM) )
{
@@
-242,21
+243,12
@@
VG_STATIC void vg_linear_clear( void *buffer )
if( meta->type == k_allocation_type_block )
{
free( meta->data );
if( meta->type == k_allocation_type_block )
{
free( meta->data );
-
-#ifdef VG_DEBUG_ALLOCATIONS
- vg_info( "free(%p) [%d]\n", meta->data, meta->type );
-#endif
}
else
{
vg_linear_clear( meta->data );
vg_linear_allocator *sub = vg_linear_header( meta->data );
}
else
{
vg_linear_clear( meta->data );
vg_linear_allocator *sub = vg_linear_header( meta->data );
-#ifdef VG_DEBUG_ALLOCATIONS
- vg_info( "free(%p) [alloc_table]\n", sub->alloc_table );
- vg_info( "free(%p) [%d]\n", sub, meta->type );
-#endif
-
free( sub->alloc_table );
free( sub );
}
free( sub->alloc_table );
free( sub );
}
@@
-303,10
+295,6
@@
VG_STATIC void *vg_create_linear_allocator( void *lin_alloc, u32 size,
else
header = malloc( sizeof(vg_linear_allocator) );
else
header = malloc( sizeof(vg_linear_allocator) );
-#ifdef VG_DEBUG_ALLOCATIONS
- vg_info( "linear_create(sub) malloc(%p)\n", header );
-#endif
-
meta->data = header+1;
meta->type = k_allocation_type_linear;
}
meta->data = header+1;
meta->type = k_allocation_type_linear;
}
@@
-327,10
+315,6
@@
VG_STATIC void *vg_create_linear_allocator( void *lin_alloc, u32 size,
header = malloc( sizeof(vg_linear_allocator) );
else
header = malloc( block_size );
header = malloc( sizeof(vg_linear_allocator) );
else
header = malloc( block_size );
-
-#ifdef VG_DEBUG_ALLOCATIONS
- vg_info( "linear_create malloc(%p)\n", header );
-#endif
}
header->allocation_count = 0;
}
header->allocation_count = 0;
@@
-344,9
+328,6
@@
VG_STATIC void *vg_create_linear_allocator( void *lin_alloc, u32 size,
{
u32 table_size = sizeof(vg_allocation_meta)*VG_MAX_ALLOCATIONS;
header->alloc_table = malloc( table_size );
{
u32 table_size = sizeof(vg_allocation_meta)*VG_MAX_ALLOCATIONS;
header->alloc_table = malloc( table_size );
-#ifdef VG_DEBUG_ALLOCATIONS
- vg_info( "linear_create(%p) [alloc_table]\n", header->alloc_table );
-#endif
}
else
header->alloc_table = NULL;
}
else
header->alloc_table = NULL;
@@
-355,10
+336,15
@@
VG_STATIC void *vg_create_linear_allocator( void *lin_alloc, u32 size,
}
/* request all the memory we need in advance */
}
/* request all the memory we need in advance */
-VG_STATIC void vg_prealloc_quota( u32 size )
+VG_STATIC void vg_set_mem_quota( u32 size )
+{
+ vg_mem.quota = size;
+}
+
+VG_STATIC void vg_alloc_quota(void)
{
u32 size_scratch = 10*1024*1024;
{
u32 size_scratch = 10*1024*1024;
-
size = VG_MAX( size
, size_scratch );
+
u32 size = VG_MAX( vg_mem.quota
, size_scratch );
vg_mem.rtmemory = vg_create_linear_allocator( NULL, size, VG_MEMORY_SYSTEM );
vg_mem.scratch = vg_create_linear_allocator( vg_mem.rtmemory,
vg_mem.rtmemory = vg_create_linear_allocator( NULL, size, VG_MEMORY_SYSTEM );
vg_mem.scratch = vg_create_linear_allocator( vg_mem.rtmemory,