Ruby 4.1.0dev (2026-03-07 revision 55694ad7efc3f8dc6d5c7aefa60ded4c303ed6cf)
pm_arena.h
Go to the documentation of this file.
1
6#ifndef PRISM_ARENA_H
7#define PRISM_ARENA_H
8
9#include "prism/defines.h"
10
11#include <stddef.h>
12#include <stdio.h>
13#include <stdlib.h>
14#include <string.h>
15
20typedef struct pm_arena_block {
23
25 size_t capacity;
26
28 size_t used;
29
33
39typedef struct {
42
46
56void * pm_arena_alloc(pm_arena_t *arena, size_t size, size_t alignment);
57
67void * pm_arena_zalloc(pm_arena_t *arena, size_t size, size_t alignment);
68
79void * pm_arena_memdup(pm_arena_t *arena, const void *src, size_t size, size_t alignment);
80
88
89#endif
void * pm_arena_zalloc(pm_arena_t *arena, size_t size, size_t alignment)
Allocate zero-initialized memory from the arena.
Definition pm_arena.c:75
struct pm_arena_block pm_arena_block_t
A single block of memory in the arena.
void * pm_arena_memdup(pm_arena_t *arena, const void *src, size_t size, size_t alignment)
Allocate memory from the arena and copy the given data into it.
Definition pm_arena.c:85
void * pm_arena_alloc(pm_arena_t *arena, size_t size, size_t alignment)
Allocate memory from the arena.
Definition pm_arena.c:37
PRISM_EXPORTED_FUNCTION void pm_arena_free(pm_arena_t *arena)
Free all blocks in the arena.
Definition pm_arena.c:95
Macro definitions used throughout the prism library.
#define PM_FLEX_ARY_LEN
A macro for defining a flexible array member.
Definition defines.h:286
#define PRISM_EXPORTED_FUNCTION
By default, we compile with -fvisibility=hidden.
Definition defines.h:53
A single block of memory in the arena.
Definition pm_arena.h:20
struct pm_arena_block * prev
The previous block in the chain (for freeing).
Definition pm_arena.h:22
char data[PM_FLEX_ARY_LEN]
The block's data.
Definition pm_arena.h:31
size_t used
The number of bytes consumed so far.
Definition pm_arena.h:28
size_t capacity
The total usable bytes in data[].
Definition pm_arena.h:25
A bump allocator.
Definition pm_arena.h:39
size_t block_count
The number of blocks allocated.
Definition pm_arena.h:44
pm_arena_block_t * current
The active block (allocate from here).
Definition pm_arena.h:41