1 /************************* toolbox/memory.h ************************************
3 Copyright (c) 1997 A. Krall, R. Grafl, M. Gschwind, M. Probst
5 See file COPYRIGHT for information on usage and disclaimer of warranties
7 Macros for memory management
9 Authors: Reinhard Grafl EMAIL: cacao@complang.tuwien.ac.at
11 Last Change: 1996/10/03
13 *******************************************************************************/
18 /* Uncollectable memory which can contain references */
19 void *heap_alloc_uncollectable(u4 bytelen);
20 #define GCNEW(type,num) heap_alloc_uncollectable(sizeof(type) * (num))
23 #define ALIGN(pos,size) ( ( ((pos)+(size)-1) / (size))*(size) )
24 #define PADDING(pos,size) ( ALIGN((pos),(size)) - (pos) )
25 #define OFFSET(s,el) ( (int) ( (size_t) &( ((s*)0) -> el ) ) )
28 #define NEW(type) ((type*) mem_alloc ( sizeof(type) ))
29 #define FREE(ptr,type) mem_free (ptr, sizeof(type) )
31 #define LNEW(type) ((type*) lit_mem_alloc ( sizeof(type) ))
32 #define LFREE(ptr,type) lit_mem_free (ptr, sizeof(type) )
34 #define MNEW(type,num) ((type*) mem_alloc ( sizeof(type) * (num) ))
35 #define MFREE(ptr,type,num) mem_free (ptr, sizeof(type) * (num) )
36 #define MREALLOC(ptr,type,num1,num2) mem_realloc (ptr, sizeof(type) * (num1), \
37 sizeof(type) * (num2) )
39 #define DNEW(type) ((type*) mem_alloc ( sizeof(type) ))
40 #define DMNEW(type,num) ((type*) mem_alloc ( sizeof(type) * (num) ))
41 #define DMREALLOC(ptr,type,num1,num2) mem_realloc (ptr, sizeof(type)*(num1),\
42 sizeof(type) * (num2) )
44 #define MCOPY(dest,src,type,num) memcpy (dest,src, sizeof(type)* (num) )
47 #define CNEW(type,num) ((type*) mem_mmap ( sizeof(type) * (num) ))
48 #define CFREE(ptr,num)
50 #define CNEW(type,num) ((type*) mem_alloc ( sizeof(type) * (num) ))
51 #define CFREE(ptr,num) mem_free (ptr, num)
54 void *mem_alloc(int length);
55 void *mem_mmap(int length);
56 void *lit_mem_alloc(int length);
57 void mem_free(void *m, int length);
58 void lit_mem_free(void *m, int length);
59 void *mem_realloc(void *m, int len1, int len2);
62 void *dump_alloc(int length);
63 void *dump_realloc(void *m, int len1, int len2);
65 void dump_release(long int size);
67 void mem_usagelog(int givewarnings);
72 ---------------------------- Interface description -----------------------
74 There are two possible choices for allocating memory:
76 1. explicit allocating / deallocating
78 mem_alloc ..... allocate a memory block
79 mem_free ...... free a memory block
80 mem_realloc ... change size of a memory block (position may change)
81 mem_usage ..... amount of allocated memory
84 2. explicit allocating, automatic deallocating
86 dump_alloc .... allocate a memory block in the dump area
87 dump_realloc .. change size of a memory block (position may change)
88 dump_size ..... marks the current top of dump
89 dump_release .. free all memory requested after the mark
92 There are some useful macros:
94 NEW (type) ....... allocate memory for an element of type `type`
95 FREE (ptr,type) .. free memory
97 MNEW (type,num) .. allocate memory for an array
98 MFREE (ptr,type,num) .. free memory
100 MREALLOC (ptr,type,num1,num2) .. enlarge the array to size num2
102 These macros do the same except they operate on the dump area:
104 DNEW, DMNEW, DMREALLOC (there is no DFREE)
107 -------------------------------------------------------------------------------
111 ALIGN (pos, size) ... make pos divisible by size. always returns an
115 OFFSET (s,el) ....... returns the offset of 'el' in structure 's' in bytes.
117 MCOPY (dest,src,type,num) ... copy 'num' elements of type 'type'.