source: git/omalloc/xalloc.h @ 518f38a

spielwiese
Last change on this file since 518f38a was 518f38a, checked in by Hans Schoenemann <hannes@…>, 2 years ago
xalloc: omStrDup
  • Property mode set to 100644
File size: 7.0 KB
Line 
1#ifndef XMEMORY_H
2#define XMEMORY_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/*
7* ABSTRACT: omalloc simulation
8*/
9/* debug routines of omalloc are not implemented, but as dummies provided: */
10#define OM_NDEBUG 1
11
12#include <stdlib.h>
13#include <string.h>
14#include "omalloc/omConfig.h"
15#ifdef __cplusplus
16extern "C" {
17  #if __cplusplus >= 201402L
18  /* clang 3.7, gcc 5.1 sets 201402L */
19  #define REGISTER
20  #elif defined(__clang__)
21  #define REGISTER
22  #else
23  #define REGISTER register
24  #endif
25#else
26  #define REGISTER register
27#endif
28
29typedef size_t            omBin;
30
31struct omInfo_s;
32typedef struct omInfo_s omInfo_t;
33struct omInfo_s
34{
35  long MaxBytesSystem;      /* set in omUpdateInfo(), is more accurate with malloc support   */
36  long CurrentBytesSystem;  /* set in omUpdateInfo(), is more accurate with malloc support */
37  long MaxBytesSbrk;        /* always up-to-date, not very accurate, needs omInintInfo() */
38  long CurrentBytesSbrk;    /* set in omUpdateInfo(), needs omInintInfo() */
39  long MaxBytesMmap;        /* set in omUpdateInfo(), not very accurate */
40  long CurrentBytesMmap;    /* set in omUpdateInfo(), not very accurate */
41  long UsedBytes;           /* set in omUpdateInfo() */
42  long AvailBytes;          /* set in omUpdateInfo() */
43  long UsedBytesMalloc;     /* set in omUpdateInfo(), needs malloc support */
44  long AvailBytesMalloc;    /* set in omUpdateInfo(), needs malloc support */
45  long MaxBytesFromMalloc;      /* always kept up-to-date */
46  long CurrentBytesFromMalloc;  /* always kept up-to-date */
47  long MaxBytesFromValloc;      /* always kept up-to-date */
48  long CurrentBytesFromValloc;  /* always kept up-to-date */
49  long UsedBytesFromValloc; /* set in omUpdateInfo()  */
50  long AvailBytesFromValloc;/* set in omUpdateInfo()  */
51  long MaxPages;            /* always kept up-to-date */
52  long UsedPages;           /* always kept up-to-date */
53  long AvailPages;          /* always kept up-to-date */
54  long MaxRegionsAlloc;     /* always kept up-to-date */
55  long CurrentRegionsAlloc; /* always kept up-to-date */
56};
57
58extern struct omInfo_s om_Info;
59
60struct omOpts_s;
61extern struct omOpts_s
62{
63  int MinTrack;
64  int MinCheck;
65  int MaxTrack;
66  int MaxCheck;
67  int Keep;
68  int HowToReportErrors;
69  int MarkAsStatic;
70  unsigned int PagesPerRegion;
71  void (*OutOfMemoryFunc)();
72  void (*MemoryLowFunc)();
73  void (*ErrorHook)();
74} om_Opts;
75
76typedef struct omOpts_s omOpts_t;
77
78extern int om_sing_opt_show_mem;
79
80#define omalloc(s) malloc(s)
81#define omAlloc(s) malloc(s)
82
83static inline void * omAlloc0(size_t s)
84{ void *d=malloc(s);memset(d,0,s); return d; }
85static inline void * omalloc0(size_t s)
86{ if (s!=0) { void *d=malloc(s);memset(d,0,s); return d;} else return NULL; }
87
88static inline void *omRealloc0Size(void *d, __attribute__((unused)) size_t os, size_t ns)
89{ if (d==NULL)
90    return omAlloc0(ns);
91  else
92  {
93    char *p=(char *)realloc(d,ns);
94    if (ns>os) memset(p+os,0,ns-os);
95    return (void*)p;
96  }
97}
98
99#define omfree(d) free(d)
100#define omFree(d) free(d)
101#define omFreeSize(d,s) free(d)
102
103#define omStrDup(s) strdup(s)
104
105#define omSizeWOfBin(bin_ptr) (((bin_ptr)+SIZEOF_LONG-1)/SIZEOF_LONG)
106
107/*******************************************************************
108 *
109 *  error codes
110 *
111 *******************************************************************/
112enum omError_e
113{
114  omError_NoError = 0,
115  omError_Unknown,
116  omError_InternalBug,
117  omError_MemoryCorrupted,
118  omError_NullAddr,
119  omError_InvalidRangeAddr,
120  omError_FalseAddr,
121  omError_FalseAddrOrMemoryCorrupted,
122  omError_WrongSize,
123  omError_FreedAddr,
124  omError_FreedAddrOrMemoryCorrupted,
125  omError_WrongBin,
126  omError_UnknownBin,
127  omError_NotBinAddr,
128  omError_UnalignedAddr,
129  omError_NullSizeAlloc,
130  omError_ListCycleError,
131  omError_SortedListError,
132  omError_KeptAddrListCorrupted,
133  omError_FreePattern,
134  omError_BackPattern,
135  omError_FrontPattern,
136  omError_NotString,
137  omError_StickyBin,
138  omError_MaxError
139};
140// typedef enum omError_e omError_t;
141
142#define omSizeWOfAddr(P)         (omSizeOfAddr(P)/SIZEOF_LONG)
143
144#define omTypeAllocBin(T,P,B)    P=(T)omAlloc(B)
145#define omTypeAlloc(T,P,S)       P=(T)omAlloc(S)
146#define omTypeAlloc0Bin(T,P,B)   P=(T)omAlloc0(B)
147#define omAlloc0Aligned(S)       omAlloc0(S)
148#define omAllocAligned(S)        omAlloc(S)
149#define omAllocBin(B)            omAlloc(B)
150#define omAllocBin0(B)           omAlloc0(B)
151#define omAlloc0Bin(B)           omAlloc0(B)
152#define omInitInfo()
153#define omInitGetBackTrace()
154#define omUpdateInfo()
155#define omPrintStats(F)
156#define omPrintInfo(F)
157#define omPrintBinStats(F)
158#define omMarkMemoryAsStatic()
159#define omFreeBin(P,B)           free(P)
160#define omfreeSize(P,S)          free(P)
161#define omFreeFunc               free
162#define omFreeBinAddr(P)         free(P)
163#define omrealloc(A,NS)          realloc(A,NS)
164#define omreallocSize(A,OS,NS)   realloc(A,NS)
165#define omrealloc0Size(A,OS,NS)  omRealloc0Size(A,OS,NS)
166#define omRealloc(A,B)           realloc(A,B)
167#define omReallocAligned(A,B)    realloc(A,B)
168#define omReallocSize(A,B,C)     realloc(A,C)
169#define omReallocAlignedSize(A,B) realloc(A,B)
170#define omMarkAsStaticAddr(A)
171#define omGetSpecBin(A)          (A)
172#define omUnGetSpecBin(A)        do {} while (0)
173#define omMemcpyW(A,B,C)         memcpy(A,B,(C)*SIZEOF_LONG)
174#define omGetStickyBinOfBin(B)   omGetSpecBin(B)
175
176
177/* debug dummies: */
178#define omTypeReallocAlignedSize     omTypeReallocSize
179#define omTypeRealloc0AlignedSize    omTypeRealloc0Size
180#define omRealloc0AlignedSize        omRealloc0Size
181#define omMemDupAligned              omMemDup
182#define omCheckIf(cond, test)                    do {} while (0)
183#define omCheckBinAddr(addr)                     do {} while (0)
184#define omCheckAddrBin(addr,bin)                 do {} while (0)
185#define omCheckBinAddrSize(addr,size)            do {} while (0)
186#define omCheckAddrSize(addr,size)               do {} while (0)
187#define omCheckAddr(addr)                        do {} while (0)
188#define omcheckAddrSize(addr,size)               do {} while (0)
189#define omcheckAddr(addr)                        do {} while (0)
190#define omCheckBin(bin)                          do {} while (0)
191#define omCheckMemory()                          do {} while (0)
192#define omPrintCurrentBackTraceMax(A,B)          do {} while (0)
193#define omPrintUsedTrackAddrs(F,max)             do {} while (0)
194#define omPrintCurrentBackTrace(F)               do {} while (0)
195#define omPrintUsedAddrs(F,max)                  do {} while (0)
196#define omdebugAddrSize(A,B)                     do {} while (0)
197#define omPrintAddrInfo(A,B,C)                   do {} while (0)
198#define omIsBinPageAddr(A)                       (1)
199#define omTestBinAddrSize(A,B,C)                 (omError_NoError)
200#define omTestList(ptr, level)                   (omError_NoError)
201#define omInitRet_2_Info(argv0)                  do {} while (0)
202#define omMergeStickyBinIntoBin(A,B)             do {} while (0)
203
204
205#ifdef __cplusplus
206}
207#endif
208
209#undef OMALLOC_USES_MALLOC
210#define X_OMALLOC
211#define omMallocFunc malloc
212#define omFreeSizeFunc omFreeSize
213#define omReallocSizeFunc realloc
214/* #define OM_NDEBUG */
215#undef OM_SING_KEEP
216
217#endif
Note: See TracBrowser for help on using the repository browser.