Tor
0.4.7.0-alpha-dev
|
Implementation for memarea_t, an allocator for allocating lots of small objects that will be freed all at once. More...
#include "orconfig.h"
#include "lib/memarea/memarea.h"
#include <stdlib.h>
#include <string.h>
#include "lib/arch/bytes.h"
#include "lib/cc/torint.h"
#include "lib/smartlist_core/smartlist_core.h"
#include "lib/smartlist_core/smartlist_foreach.h"
#include "lib/log/log.h"
#include "lib/log/util_bug.h"
#include "lib/malloc/malloc.h"
Go to the source code of this file.
Data Structures | |
struct | memarea_chunk_t |
struct | memarea_t |
Macros | |
#define | USE_SENTINELS |
#define | MEMAREA_ALIGN SIZEOF_VOID_P |
#define | U_MEM u.mem |
#define | SENTINEL_VAL 0x90806622u |
#define | SENTINEL_LEN sizeof(uint32_t) |
#define | SET_SENTINEL(chunk) |
#define | CHECK_SENTINEL(chunk) |
#define | CHUNK_HEADER_SIZE offsetof(memarea_chunk_t, U_MEM) |
#define | CHUNK_SIZE 4096 |
Functions | |
static void * | realign_pointer (void *ptr) |
static memarea_chunk_t * | alloc_chunk (size_t sz) |
static void | memarea_chunk_free_unchecked (memarea_chunk_t *chunk) |
memarea_t * | memarea_new (void) |
void | memarea_drop_all_ (memarea_t *area) |
void | memarea_clear (memarea_t *area) |
int | memarea_owns_ptr (const memarea_t *area, const void *p) |
void * | memarea_alloc (memarea_t *area, size_t sz) |
void * | memarea_alloc_zero (memarea_t *area, size_t sz) |
void * | memarea_memdup (memarea_t *area, const void *s, size_t n) |
char * | memarea_strdup (memarea_t *area, const char *s) |
char * | memarea_strndup (memarea_t *area, const char *s, size_t n) |
void | memarea_get_stats (memarea_t *area, size_t *allocated_out, size_t *used_out) |
void | memarea_assert_ok (memarea_t *area) |
Implementation for memarea_t, an allocator for allocating lots of small objects that will be freed all at once.
Definition in file memarea.c.
#define CHECK_SENTINEL | ( | chunk | ) |
Assert that the sentinel on a memarea is set correctly.
#define CHUNK_HEADER_SIZE offsetof(memarea_chunk_t, U_MEM) |
#define CHUNK_SIZE 4096 |
#define MEMAREA_ALIGN SIZEOF_VOID_P |
#define SENTINEL_LEN sizeof(uint32_t) |
#define SENTINEL_VAL 0x90806622u |
#define SET_SENTINEL | ( | chunk | ) |
Given a mem_area_chunk_t with SENTINEL_LEN extra bytes allocated at the end, set those bytes.
#define U_MEM u.mem |
#define USE_SENTINELS |
|
static |
Helper: allocate a new memarea chunk of around chunk_size bytes.
Definition at line 125 of file memarea.c.
Referenced by memarea_alloc().
void* memarea_alloc | ( | memarea_t * | area, |
size_t | sz | ||
) |
Return a pointer to a chunk of memory in area of at least sz bytes. sz should be significantly smaller than the area's chunk size, though we can deal if it isn't.
Definition at line 209 of file memarea.c.
Referenced by cdline_linecpy(), consensus_split_lines(), memarea_alloc_zero(), memarea_memdup(), memarea_strndup(), and storage_dir_save_labeled_to_file().
void* memarea_alloc_zero | ( | memarea_t * | area, |
size_t | sz | ||
) |
As memarea_alloc(), but clears the memory it returns.
void memarea_assert_ok | ( | memarea_t * | area | ) |
|
static |
Release chunk from a memarea.
Definition at line 145 of file memarea.c.
Referenced by memarea_clear(), and memarea_drop_all_().
void memarea_clear | ( | memarea_t * | area | ) |
Forget about having allocated anything in area, and free some of the backing storage associated with it, as appropriate. Invalidates all pointers returned from memarea_alloc() for this area.
void memarea_drop_all_ | ( | memarea_t * | area | ) |
Free area, invalidating all pointers returned from memarea_alloc() and friends for this area
void memarea_get_stats | ( | memarea_t * | area, |
size_t * | allocated_out, | ||
size_t * | used_out | ||
) |
void* memarea_memdup | ( | memarea_t * | area, |
const void * | s, | ||
size_t | n | ||
) |
As memdup, but returns the memory from area.
Definition at line 257 of file memarea.c.
Referenced by cdline_linecpy(), and memarea_strdup().
memarea_t* memarea_new | ( | void | ) |
Allocate and return new memarea.
Definition at line 153 of file memarea.c.
Referenced by consensus_diff_apply(), decode_introduction_point(), microdescs_parse_from_string(), router_parse_entry_from_string(), and storage_dir_save_labeled_to_file().
int memarea_owns_ptr | ( | const memarea_t * | area, |
const void * | p | ||
) |
char* memarea_strdup | ( | memarea_t * | area, |
const char * | s | ||
) |
char* memarea_strndup | ( | memarea_t * | area, |
const char * | s, | ||
size_t | n | ||
) |
As strndup, but returns the memory from area.
Definition at line 273 of file memarea.c.
Referenced by get_token_arguments().
|
inlinestatic |
Increment ptr until it is aligned to MEMAREA_ALIGN.
Definition at line 79 of file memarea.c.
Referenced by memarea_alloc(), and memarea_assert_ok().