#include "duktape.h"
Go to the source code of this file.
◆ duk_alloc_hybrid()
void * duk_alloc_hybrid |
( |
void * | udata, |
|
|
duk_size_t | size ) |
Definition at line 151 of file duktape-1.5.2/examples/alloc-hybrid/duk_alloc_hybrid.c.
151 {
153 int i;
154 void *new_ptr;
155
156#if 0
158#endif
159
160 if (size == 0) {
162 }
164#ifdef DUK_ALLOC_HYBRID_DEBUG
165 printf(
"alloc fallback: %ld\n", (
long) size);
166#endif
168 }
169
172 if (hdr->
size < size) {
173 continue;
174 }
175
177#if 0
178 printf(
"alloc from pool: %ld -> pool size %ld\n", (
long) size, (
long) hdr->
size);
179#endif
180 new_ptr = (
void *) hdr->
free;
182 return new_ptr;
183 } else {
184#ifdef DUK_ALLOC_HYBRID_DEBUG
185 printf(
"alloc out of pool entries: %ld -> pool size %ld\n", (
long) size, (
long) hdr->
size);
186#endif
187 break;
188 }
189 }
190
191#ifdef DUK_ALLOC_HYBRID_DEBUG
192 printf(
"alloc fallback (out of pool): %ld\n", (
long) size);
193#endif
195}
static void dump_pool_state(pool_state *st)
pool_header headers[NUM_POOLS]
◆ duk_alloc_hybrid_init()
void * duk_alloc_hybrid_init |
( |
void | | ) |
|
Definition at line 89 of file duktape-1.5.2/examples/alloc-hybrid/duk_alloc_hybrid.c.
89 {
91 size_t total_size, max_size;
92 int i, j;
93 char *p;
94
96 if (!st) {
98 }
100 st->alloc_start =
NULL;
101 st->alloc_end =
NULL;
102
103 for (i = 0, total_size = 0, max_size = 0; i < (int)
NUM_POOLS; i++) {
104#ifdef DUK_ALLOC_HYBRID_DEBUG
106#endif
110 }
111 }
112#ifdef DUK_ALLOC_HYBRID_DEBUG
113 printf(
"Total size %ld, max pool size %ld\n", (
long) total_size, (
long) max_size);
114#endif
115
116 st->alloc_start = (
char *)
malloc(total_size);
117 if (!st->alloc_start) {
120 }
121 st->alloc_end = st->alloc_start + total_size;
122 st->pool_max_size = max_size;
123 memset((void *) st->alloc_start, 0, total_size);
124
125 for (i = 0, p = st->alloc_start; i < (int)
NUM_POOLS; i++) {
127
133
138 } else {
140 }
142 }
143 }
144
146
147
148 return (void *) st;
149}
static pool_size_spec pool_sizes[]
◆ duk_free_hybrid()
void duk_free_hybrid |
( |
void * | udata, |
|
|
void * | ptr ) |
Definition at line 259 of file duktape-1.5.2/examples/alloc-hybrid/duk_alloc_hybrid.c.
259 {
261 int i;
262
263#if 0
265#endif
266
269 return;
270 }
271#if 0
272 printf(
"free out of pool: %p\n", (
void *) ptr);
273#endif
275 return;
276 }
277
283#if 0
284 printf(
"free from pool: %p\n", ptr);
285#endif
286 return;
287 }
288 }
289
290#ifdef DUK_ALLOC_HYBRID_DEBUG
292#endif
293}
#define ADDR_IN_STATE_ALLOC(st, p)
#define ADDR_IN_HEADER_ALLOC(hdr, p)
◆ duk_realloc_hybrid()
void * duk_realloc_hybrid |
( |
void * | udata, |
|
|
void * | ptr, |
|
|
duk_size_t | size ) |
Definition at line 197 of file duktape-1.5.2/examples/alloc-hybrid/duk_alloc_hybrid.c.
197 {
199 void *new_ptr;
200 int i;
201
202#if 0
204#endif
205
207
211 if (size <= hdr->size) {
212
213#if 0
214 printf(
"realloc original from pool: still fits, size %ld, pool size %ld\n",
215 (
long) size, (
long) hdr->
size);
216#endif
217 return ptr;
218 }
219
221 if (!new_ptr) {
222#ifdef DUK_ALLOC_HYBRID_DEBUG
223 printf(
"realloc original from pool: needed larger size, failed to alloc\n");
224#endif
226 }
227 memcpy(new_ptr, ptr, hdr->
size);
228
231#if 0
232 printf(
"realloc original from pool: size %ld, pool size %ld\n", (
long) size, (
long) hdr->
size);
233#endif
234 return new_ptr;
235 }
236 }
237#ifdef DUK_ALLOC_HYBRID_DEBUG
239#endif
241 }
else if (ptr !=
NULL) {
242 if (size == 0) {
245 } else {
246#ifdef DUK_ALLOC_HYBRID_DEBUG
247 printf(
"realloc fallback: size %ld\n", (
long) size);
248#endif
250 }
251 } else {
252#if 0
253 printf(
"realloc NULL ptr, call alloc: %ld\n", (
long) size);
254#endif
256 }
257}
void * duk_alloc_hybrid(void *udata, duk_size_t size)