-
Notifications
You must be signed in to change notification settings - Fork 0
/
heap.h
34 lines (30 loc) · 934 Bytes
/
heap.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef __HEAP
#define __HEAP
#include <stddef.h>
#include <stdint.h>
typedef struct metadata {
size_t size;
size_t free;
struct metadata *next, *prev;
} metadata_t;
#if __SIZE_WIDTH__ == 64
#define YFREE 0xDEADBEEF5EBA571E
#define NFREE 0x5EBA571EDEADBEEF
#define ALIGN_BYTES(x) ((((x - 1) >> 4) << 4) + 16)
#else
#define YFREE 0x5EBA571E
#define NFREE 0xDEADBEEF
#define ALIGN_BYTES(x) ((((x - 1) >> 3) << 3) + 8)
#endif
#define SIZE_TAB_VALUES (256)
#define META_SIZE ALIGN_BYTES((sizeof(metadata_t)))
#define GET_PAYLOAD(x) ((void *) ((size_t) x + META_SIZE))
#define GET_NODE(x) ((void *) ((size_t) x - META_SIZE))
#define SIZE_DEFAULT_BLOCK (32)
#define IS_VALID(x) \
(((metadata_t *) x)->free == YFREE || ((metadata_t *) x)->free == NFREE)
void *get_heap(size_t size);
void change_break(metadata_t *node);
int is_invalid_pointer(void *ptr);
metadata_t *fusion(metadata_t *first, metadata_t *second);
#endif