summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/al/lib.h11
-rw-r--r--src/lib.c25
2 files changed, 13 insertions, 23 deletions
diff --git a/include/al/lib.h b/include/al/lib.h
index a8f2b9f..5748293 100644
--- a/include/al/lib.h
+++ b/include/al/lib.h
@@ -4,6 +4,7 @@
#include "types.h"
#define AL_USE_STDLIB
+//#define AL_MEMORY_TRACKING
//#define AL_FORCE_DISABLE_OUTPUT
#if defined __clang__ || defined __GNUC__
@@ -27,6 +28,7 @@
#include <math.h>
#include <time.h>
+#ifdef AL_MEMORY_TRACKING
void al_malloc_init(void);
void al_malloc_close(void);
void *al_malloc(size_t n);
@@ -39,6 +41,15 @@ int al_posix_memalign(void **ptr, size_t alignment, size_t n);
void al_malloc_stats(u32 *current, u32 *peak, u32 *total);
void al_set_alloc(void *(*malloc_func)(size_t), void *(*calloc_func)(size_t, size_t),
void *(*realloc_func)(void *, size_t), void (*free_func)(void *));
+#else
+#define al_malloc malloc
+#define al_calloc calloc
+#define al_realloc realloc
+#define al_free free
+#ifdef AL_HAVE_POSIX_MEMALIGN
+#define al_posix_memalign posix_memalign
+#endif
+#endif
#define al_memcpy memcpy
#define al_memmove memmove
diff --git a/src/lib.c b/src/lib.c
index 956c9b7..78b7fdf 100644
--- a/src/lib.c
+++ b/src/lib.c
@@ -7,6 +7,7 @@
AL_ASSERT_TYPE_SIZE(int, 4);
AL_ASSERT_TYPE_SIZE(unsigned, 4);
+#ifdef AL_MEMORY_TRACKING
#ifdef AL_USE_STDLIB
static void *(*_al_malloc)(size_t) = malloc;
static void *(*_al_calloc)(size_t, size_t) = calloc;
@@ -17,8 +18,6 @@ s32 (*_al_posix_memalign)(void **, size_t, size_t) = posix_memalign;
#endif
// Testing allocation tracking stuff (Very scuffed, not thread-safe!).
-//#define AL_MEMORY_TRACKING
-#ifdef AL_MEMORY_TRACKING
struct alloc_t {
void *ptr;
size_t size;
@@ -37,26 +36,20 @@ static array(struct alloc_t) allocations;
static u32 currently_allocated = 0;
static u32 peak_allocated = 0;
static u32 total_allocated = 0;
-#endif
void al_malloc_init(void)
{
-#ifdef AL_MEMORY_TRACKING
al_array_init(allocations);
-#endif
}
void al_malloc_close(void)
{
-#ifdef AL_MEMORY_TRACKING
al_array_free(allocations);
-#endif
}
void *al_malloc(size_t n)
{
void *ptr = _al_malloc(n);
-#ifdef AL_MEMORY_TRACKING
printf("**al_malloc(%zu)\n", n);
struct alloc_t a = {
.ptr = ptr,
@@ -68,14 +61,12 @@ void *al_malloc(size_t n)
peak_allocated = currently_allocated;
}
al_array_push(allocations, a);
-#endif
return ptr;
}
void *al_calloc(size_t n, size_t size)
{
void *ptr = _al_calloc(n, size);
-#ifdef AL_MEMORY_TRACKING
printf("**al_calloc(%zu, %zu)\n", n, size);
struct alloc_t a = {
.ptr = ptr,
@@ -87,14 +78,12 @@ void *al_calloc(size_t n, size_t size)
peak_allocated = currently_allocated;
}
al_array_push(allocations, a);
-#endif
return ptr;
}
void *al_realloc(void *ptr, size_t n)
{
void *nptr = _al_realloc(ptr, n);
-#ifdef AL_MEMORY_TRACKING
printf("**al_realloc(%p, %zu)\n", ptr, n);
for (u32 i = 0; i < allocations.size; i++) {
struct alloc_t *a = &al_array_at(allocations, i);
@@ -119,13 +108,11 @@ void *al_realloc(void *ptr, size_t n)
al_array_push(allocations, a);
}
total_allocated += n;
-#endif
return nptr;
}
void al_free(void *ptr)
{
-#ifdef AL_MEMORY_TRACKING
printf("**al_free(%p)\n", ptr);
for (u32 i = 0; i < allocations.size; i++) {
struct alloc_t *a = &al_array_at(allocations, i);
@@ -135,7 +122,6 @@ void al_free(void *ptr)
break;
}
}
-#endif
_al_free(ptr);
}
@@ -143,7 +129,6 @@ void al_free(void *ptr)
s32 al_posix_memalign(void **ptr, size_t alignment, size_t n)
{
s32 res = _al_posix_memalign(ptr, alignment, n);
-#ifdef AL_MEMORY_TRACKING
size_t actual_size = (n + alignment) - ((n + alignment) % alignment);
printf("**al_posix_memalign(%zu, %zu(%zu))\n", alignment, n, actual_size);
struct alloc_t a = {
@@ -156,22 +141,15 @@ s32 al_posix_memalign(void **ptr, size_t alignment, size_t n)
peak_allocated = currently_allocated;
}
al_array_push(allocations, a);
-#endif
return res;
}
#endif
void al_malloc_stats(u32 *current, u32 *peak, u32 *total)
{
-#ifdef AL_MEMORY_TRACKING
*current = currently_allocated;
*peak = peak_allocated;
*total = total_allocated;
-#else
- *current = 0;
- *peak = 0;
- *total = 0;
-#endif
}
void al_set_alloc(void *(*malloc_func)(size_t), void *(*calloc_func)(size_t, size_t),
@@ -183,6 +161,7 @@ void al_set_alloc(void *(*malloc_func)(size_t), void *(*calloc_func)(size_t, siz
_al_free = free_func;
}
#endif
+#endif
// Default to 4KB.
size_t al_page_size = 0x1000;