7 #ifndef OM_ALLOC_SYSTEM_C
8 #define OM_ALLOC_SYSTEM_C
15 #include "omDefaultConfig.h"
21 #define OM_MALLOC_FROM_SYSTEM OM_MALLOC_MALLOC
22 #define OM_REALLOC_FROM_SYSTEM OM_MALLOC_REALLOC
23 #define OM_FREE_TO_SYSTEM OM_MALLOC_FREE
31 #if defined(HAVE_MALLOC_SIZE)
32 #include <malloc/malloc.h>
33 #define _omSizeOfLargeAddr(addr) (malloc_size(addr))
34 #elif defined(HAVE_MALLOC_USABLE_SIZE)
36 #define _omSizeOfLargeAddr(addr) (malloc_usable_size(addr))
43 *((
size_t*) addr) =
size;
44 return (
void *)(addr + SIZEOF_STRICT_ALIGNMENT);
54 new_size = OM_ALIGN_SIZE(new_size);
55 _old_addr = (
char *)old_addr - SIZEOF_STRICT_ALIGNMENT;
57 *((
size_t*) _old_addr) + SIZEOF_STRICT_ALIGNMENT,
58 new_size + SIZEOF_STRICT_ALIGNMENT);
59 *((
size_t*) new_addr) = new_size;
60 return (
void *)(new_addr + SIZEOF_STRICT_ALIGNMENT);
65 char* _addr = (
char *)addr - SIZEOF_STRICT_ALIGNMENT;
69 #define _omSizeOfLargeAddr(addr) (*((size_t*) ((char*) addr - SIZEOF_STRICT_ALIGNMENT)))
75 memset(addr, 0,
size);
90 if (new_size > old_size)
91 memset(new_addr + old_size, 0, new_size - old_size);
92 return (
void *)new_addr;
130 #ifdef OM_HAVE_VALLOC_MMAP
134 #define OM_VALLOC_FROM_SYSTEM omVallocMmap
135 #define OM_VFREE_TO_SYSTEM omVfreeMmap
137 #elif defined(OM_HAVE_VALLOC_MALLOC)
139 #define OM_VALLOC_FROM_SYSTEM OM_MALLOC_VALLOC
140 #define OM_VFREE_TO_SYSTEM OM_MALLOC_VFREE
144 #define OM_VALLOC_FROM_SYSTEM omEmulateValloc
145 #define OM_VFREE_TO_SYSTEM omEmulateVfree
147 #define OM_ALIGN_PAGE(addr) ( ((long)addr + (SIZEOF_SYSTEM_PAGE -1)) & ~(SIZEOF_SYSTEM_PAGE - 1))
152 size_t padding = SIZEOF_VOIDP;
158 if ((
OM_ALIGN_PAGE(addr) + SIZEOF_VOIDP) - (
long) addr <= padding)
161 *((
void**) ((
void*) ret_addr +
size)) = addr;
167 padding = padding << 1;
191 OM_MEMORY_LOW_HOOK();
195 OM_OUT_OF_MEMORY_HOOK();
199 #if defined(HAVE_MALLOC_SIZE) || defined(HAVE_MALLOC_USABLE_SIZE)
215 #if defined(OM_HAVE_VALLOC_MMAP) && defined(OM_MALLOC_MAX_BYTES_SYSTEM)
216 if (
om_Info.CurrentBytesFromValloc + OM_MALLOC_MAX_BYTES_SYSTEM >
om_Info.MaxBytesSystem)
217 om_Info.MaxBytesSystem =
om_Info.CurrentBytesFromValloc + OM_MALLOC_MAX_BYTES_SYSTEM;
219 #if defined(HAVE_SBRK) && !defined(OM_MALLOC_MAX_BYTES_SBRK)
222 #ifndef OM_HAVE_VALLOC_MMAP
223 +
om_Info.CurrentBytesFromValloc
231 OM_MALLOC_HOOK(
size);
248 OM_MEMORY_LOW_HOOK();
255 OM_OUT_OF_MEMORY_HOOK();
270 om_Info.CurrentBytesFromMalloc += (long) newsize - (
long) oldsize;
276 #if defined(OM_HAVE_VALLOC_MMAP) && defined(OM_MALLOC_MAX_BYTES_SYSTEM)
277 if (
om_Info.CurrentBytesFromValloc + OM_MALLOC_MAX_BYTES_SYSTEM >
om_Info.MaxBytesSystem)
278 om_Info.MaxBytesSystem =
om_Info.CurrentBytesFromValloc + OM_MALLOC_MAX_BYTES_SYSTEM;
280 #if defined(HAVE_SBRK) && !defined(OM_MALLOC_MAX_BYTES_SBRK)
282 #ifndef OM_HAVE_VALLOC_MMAP
283 +
om_Info.CurrentBytesFromValloc
292 OM_REALLOC_HOOK(oldsize, newsize);
313 OM_MEMORY_LOW_HOOK();
317 if (fail)
return NULL;
320 OM_OUT_OF_MEMORY_HOOK();
340 #if defined(OM_HAVE_VALLOC_MMAP) && defined(OM_MALLOC_MAX_BYTES_SYSTEM)
341 if (
om_Info.MaxBytesFromValloc + OM_MALLOC_MAX_BYTES_SYSTEM >
om_Info.MaxBytesSystem)
342 om_Info.MaxBytesSystem =
om_Info.MaxBytesFromValloc + OM_MALLOC_MAX_BYTES_SYSTEM;
344 #if defined(HAVE_SBRK) && !defined(OM_HAVE_VALLOC_MMAP) && !defined(OM_MALLOC_MAX_BYTES_SBRK)
350 +
om_Info.CurrentBytesFromValloc);
354 OM_VALLOC_HOOK(
size);