libpulsar
A modular compiler for the pulsar programming language
Loading...
Searching...
No Matches
Macros | Functions | Variables
arena.c File Reference
#include "arena.h"
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/mman.h>
#include <unistd.h>
#include <libgen.h>
#include "util/abort.h"

Go to the source code of this file.

Macros

#define _PSDebug(...)   /* nothing */
 
#define NUSED   __attribute__((unused))
 
#define _PS_ARENA_ALLOCATE(arena, n)
 

Functions

void ps_arena_open (enum ps_arena_domain domain)
 Initializes the given arena for allocation.
 
void ps_arena_close (enum ps_arena_domain domain)
 Destroys any allocated objects in the given arena.
 
void * ps_arena_allocate (enum ps_arena_domain domain, size_t n)
 
void * ps_arena_allocate_debug (enum ps_arena_domain domain, size_t n, const char *file NUSED, const char *func NUSED, size_t line NUSED)
 
char * arena_strndup (enum ps_arena_domain arena, const char *str, size_t length)
 

Variables

struct ps_arena_allocator arenas [__PS_ARENA_COUNT]
 

Macro Definition Documentation

◆ _PS_ARENA_ALLOCATE

#define _PS_ARENA_ALLOCATE (   arena,
 
)
Value:
do { \
if (arena->offset + n >= PS_INITIAL_ARENA_MMAP) { \
_PSDebug("Exhausted arena virtual memory\n%s", ""); \
ps_exit(1); \
} \
arena->offset += n; \
if ((arena->offset & (arena->page_size - 1)) > 0) { \
const size_t new_size = (arena->offset + arena->page_size - 1) \
& -(arena->page_size); \
mprotect(arena->start, new_size, PROT_READ | PROT_WRITE); \
} \
} while (0)
#define PS_INITIAL_ARENA_MMAP
An allocation of 16MB per arena.
Definition arena.h:13

Definition at line 62 of file arena.c.

◆ _PSDebug

#define _PSDebug (   ...)    /* nothing */

Definition at line 18 of file arena.c.

◆ NUSED

#define NUSED   __attribute__((unused))

Definition at line 20 of file arena.c.

Function Documentation

◆ arena_strndup()

char * arena_strndup ( enum ps_arena_domain  arena,
const char *  str,
size_t  length 
)

Definition at line 92 of file arena.c.

◆ ps_arena_allocate()

void * ps_arena_allocate ( enum ps_arena_domain  domain,
size_t  n 
)

Definition at line 76 of file arena.c.

◆ ps_arena_allocate_debug()

void * ps_arena_allocate_debug ( enum ps_arena_domain  domain,
size_t  n,
const char *file  NUSED,
const char *func  NUSED,
size_t line  NUSED 
)

Definition at line 84 of file arena.c.

◆ ps_arena_close()

void ps_arena_close ( enum ps_arena_domain  domain)

Destroys any allocated objects in the given arena.

If the arena is already closed, this function does nothing.

Parameters
domainThe arena to close.

Definition at line 45 of file arena.c.

◆ ps_arena_open()

void ps_arena_open ( enum ps_arena_domain  domain)

Initializes the given arena for allocation.

Parameters
domainThe arena to initialize.

Definition at line 24 of file arena.c.

Variable Documentation

◆ arenas

Definition at line 22 of file arena.c.