summaryrefslogtreecommitdiffstats
path: root/src/alloc.h
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2023-11-09 15:16:04 -0500
committerTavian Barnes <tavianator@tavianator.com>2023-11-09 15:35:40 -0500
commite25261a90222de75781726a93ab809c660208afd (patch)
treeeed200bdebfd981821754a6bb154e3db30a109f5 /src/alloc.h
parentc745df94a182b8a569cb833ecfbe8da33bf01f98 (diff)
downloadbfs-e25261a90222de75781726a93ab809c660208afd.tar.xz
config: Add (de)allocator attributes
Diffstat (limited to 'src/alloc.h')
-rw-r--r--src/alloc.h40
1 files changed, 23 insertions, 17 deletions
diff --git a/src/alloc.h b/src/alloc.h
index fd3e5f0..34f6949 100644
--- a/src/alloc.h
+++ b/src/alloc.h
@@ -9,7 +9,7 @@
#define BFS_ALLOC_H
#include "config.h"
-#include <stddef.h>
+#include <stdlib.h>
/** Round down to a multiple of an alignment. */
static inline size_t align_floor(size_t align, size_t size) {
@@ -108,6 +108,8 @@ static inline size_t flex_size(size_t align, size_t min, size_t offset, size_t s
* @return
* The allocated memory, or NULL on failure.
*/
+attr_malloc(free, 1)
+attr_aligned_alloc(1, 2)
void *alloc(size_t align, size_t size);
/**
@@ -120,6 +122,8 @@ void *alloc(size_t align, size_t size);
* @return
* The allocated memory, or NULL on failure.
*/
+attr_malloc(free, 1)
+attr_aligned_alloc(1, 2)
void *zalloc(size_t align, size_t size);
/** Allocate memory for the given type. */
@@ -176,14 +180,15 @@ void arena_init(struct arena *arena, size_t align, size_t size);
arena_init((arena), alignof(type), sizeof(type))
/**
- * Allocate an object out of the arena.
+ * Free an object from the arena.
*/
-void *arena_alloc(struct arena *arena);
+void arena_free(struct arena *arena, void *ptr);
/**
- * Free an object from the arena.
+ * Allocate an object out of the arena.
*/
-void arena_free(struct arena *arena, void *ptr);
+attr_malloc(arena_free, 2)
+void *arena_alloc(struct arena *arena);
/**
* Free all allocations from an arena.
@@ -243,6 +248,18 @@ void varena_init(struct varena *varena, size_t align, size_t min, size_t offset,
varena_init(varena, alignof(type), sizeof(type), offsetof(type, member), sizeof_member(type, member[0]))
/**
+ * Free an arena-allocated flexible struct.
+ *
+ * @param varena
+ * The that allocated the object.
+ * @param ptr
+ * The object to free.
+ * @param count
+ * The length of the flexible array.
+ */
+void varena_free(struct varena *varena, void *ptr, size_t count);
+
+/**
* Arena-allocate a flexible struct.
*
* @param varena
@@ -252,6 +269,7 @@ void varena_init(struct varena *varena, size_t align, size_t min, size_t offset,
* @return
* The allocated struct, or NULL on failure.
*/
+attr_malloc(varena_free, 2)
void *varena_alloc(struct varena *varena, size_t count);
/**
@@ -285,18 +303,6 @@ void *varena_realloc(struct varena *varena, void *ptr, size_t old_count, size_t
void *varena_grow(struct varena *varena, void *ptr, size_t *count);
/**
- * Free an arena-allocated flexible struct.
- *
- * @param varena
- * The that allocated the object.
- * @param ptr
- * The object to free.
- * @param count
- * The length of the flexible array.
- */
-void varena_free(struct varena *varena, void *ptr, size_t count);
-
-/**
* Free all allocations from a varena.
*/
void varena_clear(struct varena *varena);