Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
stenzek
GitHub Repository: stenzek/duckstation
Path: blob/master/dep/lzma/include/Alloc.h
4253 views
1
/* Alloc.h -- Memory allocation functions
2
2024-01-22 : Igor Pavlov : Public domain */
3
4
#ifndef ZIP7_INC_ALLOC_H
5
#define ZIP7_INC_ALLOC_H
6
7
#include "7zTypes.h"
8
9
EXTERN_C_BEGIN
10
11
/*
12
MyFree(NULL) : is allowed, as free(NULL)
13
MyAlloc(0) : returns NULL : but malloc(0) is allowed to return NULL or non_NULL
14
MyRealloc(NULL, 0) : returns NULL : but realloc(NULL, 0) is allowed to return NULL or non_NULL
15
MyRealloc() is similar to realloc() for the following cases:
16
MyRealloc(non_NULL, 0) : returns NULL and always calls MyFree(ptr)
17
MyRealloc(NULL, non_ZERO) : returns NULL, if allocation failed
18
MyRealloc(non_NULL, non_ZERO) : returns NULL, if reallocation failed
19
*/
20
21
void *MyAlloc(size_t size);
22
void MyFree(void *address);
23
void *MyRealloc(void *address, size_t size);
24
25
void *z7_AlignedAlloc(size_t size);
26
void z7_AlignedFree(void *p);
27
28
#ifdef _WIN32
29
30
#ifdef Z7_LARGE_PAGES
31
void SetLargePageSize(void);
32
#endif
33
34
void *MidAlloc(size_t size);
35
void MidFree(void *address);
36
void *BigAlloc(size_t size);
37
void BigFree(void *address);
38
39
/* #define Z7_BIG_ALLOC_IS_ZERO_FILLED */
40
41
#else
42
43
#define MidAlloc(size) z7_AlignedAlloc(size)
44
#define MidFree(address) z7_AlignedFree(address)
45
#define BigAlloc(size) z7_AlignedAlloc(size)
46
#define BigFree(address) z7_AlignedFree(address)
47
48
#endif
49
50
extern const ISzAlloc g_Alloc;
51
52
#ifdef _WIN32
53
extern const ISzAlloc g_BigAlloc;
54
extern const ISzAlloc g_MidAlloc;
55
#else
56
#define g_BigAlloc g_AlignedAlloc
57
#define g_MidAlloc g_AlignedAlloc
58
#endif
59
60
extern const ISzAlloc g_AlignedAlloc;
61
62
63
typedef struct
64
{
65
ISzAlloc vt;
66
ISzAllocPtr baseAlloc;
67
unsigned numAlignBits; /* ((1 << numAlignBits) >= sizeof(void *)) */
68
size_t offset; /* (offset == (k * sizeof(void *)) && offset < (1 << numAlignBits) */
69
} CAlignOffsetAlloc;
70
71
void AlignOffsetAlloc_CreateVTable(CAlignOffsetAlloc *p);
72
73
74
EXTERN_C_END
75
76
#endif
77
78