acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
malloc.cpp
1
#include "framework.h"
2
#include "acme/memory/allocator/malloc.h"
3
#include "acme/platform/system.h"
4
#if defined(OPENBSD)
5
#include <sys/types.h>
6
#include <sys/malloc.h>
7
#elif defined(LINUX) || defined(__BSD__)
8
#include <malloc.h>
9
#elif defined(__APPLE__)
10
#include <malloc/malloc.h>
11
#endif
12
13
14
namespace
heap
15
{
16
17
18
malloc_allocator::malloc_allocator()
19
{
20
21
22
}
23
24
25
malloc_allocator::~malloc_allocator()
26
{
27
28
29
}
30
31
32
void
malloc_allocator::initialize_allocator(::acme::acme * pacme)
33
{
34
35
allocator::initialize_allocator(pacme);
36
37
}
38
39
void
* malloc_allocator::allocate(memsize s, memsize * psizeAllocated, const_char_pointer pszAnnotation)
40
{
41
42
#ifdef WINDOWS
43
44
auto
p = _malloc_base((
size_t
)s);
45
46
#else
47
48
auto
p = ::malloc(s);
49
50
51
#endif
52
53
if
(psizeAllocated)
54
{
55
56
auto
sizeAlloc = size(p);
57
58
if
(sizeAlloc <= 0)
59
{
60
61
*psizeAllocated = s;
62
63
}
64
else
65
{
66
67
*psizeAllocated = sizeAlloc;
68
69
}
70
71
}
72
73
return
p;
74
75
}
76
77
78
void
* malloc_allocator::reallocate(
void
* p, memsize s, const_char_pointer pszAnnotation)
79
{
80
#ifdef WINDOWS
81
82
return
_realloc_base(p, (
size_t
)s);
83
84
#else
85
86
return ::realloc(p, s);
87
88
#endif
89
}
90
91
92
void
malloc_allocator::free(
void
* p)
93
{
94
95
#ifdef WINDOWS
96
97
return
_free_base(p);
98
99
#else
100
101
::free(p);
102
103
#endif
104
105
}
106
107
108
memsize malloc_allocator::size(
void
* p)
109
{
110
111
//{
112
113
#if defined(OPENBSD) || defined(NETBSD)
114
115
return
0;
116
117
#elif defined(__APPLE__)
118
119
return
malloc_size(p);
120
121
#elif defined(WINDOWS)
122
123
return
_msize(p);
124
125
#else
126
127
return
malloc_usable_size(p);
128
129
#endif
130
131
//}
132
133
}
134
135
136
bool
malloc_allocator::has_size()
const
137
{
138
139
return
true
;
140
141
}
142
143
144
//
145
//
146
//void * operating_system_memory_allocate(memsize size)
147
//{
148
//
149
//
150
//}
151
//
152
//
153
//void * operating_system_memory_reallocate(void * p, memsize size)
154
//{
155
//
156
//
157
//}
158
159
160
//void operating_system_memory_free(void * p)
161
//{
162
//
163
//
164
//}
165
166
//
167
//memsize operating_system_memory_size(void * p)
168
//{
169
//
170
//#ifdef __APPLE__
171
//
172
// return malloc_size(p);
173
//
174
//#elif defined(WINDOWS)
175
//
176
// return _msize(p);
177
//
178
//#else
179
//
180
// return malloc_usable_size(p);
181
//
182
//#endif
183
//
184
//}
185
//
186
void
malloc_allocator::check_bounds(::u8 * p)
187
{
188
189
uptr * pinteraction = (uptr *)p;
190
191
::u8 a[256];
192
193
zero(a);
194
195
if
(memory_order(&p[
sizeof
(uptr)], a,
sizeof
(a)) != 0)
196
{
197
198
informationf(
"memory corruption before allocation"
);
199
200
}
201
202
if
(memory_order(&p[
sizeof
(uptr) + 256 + *pinteraction], a,
sizeof
(a)) != 0)
203
{
204
205
informationf(
"memory corruption after allocation"
);
206
207
}
208
209
}
210
211
212
}
// namespace heap
213
214
215
memory
allocator
malloc.cpp
Generated by
1.17.0