My Project
Toggle main menu visibility
Loading...
Searching...
No Matches
omalloc
xalloc.h
Go to the documentation of this file.
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
/* use of Bins: define for optimal performancei(6%), undef for valgrind */
12
#define XALLOC_BIN 1
13
14
/* performancce of xalloc+XALLOC_BIN: +32.6 %, xalloc w/o XALLOC_BIN: +40.7 %
15
* (omalloc=100 %) */
16
#include <stdlib.h>
17
#include <string.h>
18
#include "omalloc/omConfig.h"
19
#ifdef __cplusplus
20
extern
"C"
{
21
#if __cplusplus >= 201402L
22
/* clang 3.7, gcc 5.1 sets 201402L */
23
#define REGISTER
24
#elif defined(__clang__)
25
#define REGISTER
26
#else
27
#define REGISTER register
28
#endif
29
#else
30
#define REGISTER register
31
#endif
32
33
34
35
struct
omInfo_s
;
36
typedef
struct
omInfo_s
omInfo_t;
37
struct
omInfo_s
38
{
39
long
MaxBytesSystem
;
/* set in omUpdateInfo(), is more accurate with malloc support */
40
long
CurrentBytesSystem
;
/* set in omUpdateInfo(), is more accurate with malloc support */
41
long
MaxBytesSbrk
;
/* always up-to-date, not very accurate, needs omInintInfo() */
42
long
CurrentBytesSbrk
;
/* set in omUpdateInfo(), needs omInintInfo() */
43
long
MaxBytesMmap
;
/* set in omUpdateInfo(), not very accurate */
44
long
CurrentBytesMmap
;
/* set in omUpdateInfo(), not very accurate */
45
long
UsedBytes
;
/* set in omUpdateInfo() */
46
long
AvailBytes
;
/* set in omUpdateInfo() */
47
long
UsedBytesMalloc
;
/* set in omUpdateInfo(), needs malloc support */
48
long
AvailBytesMalloc
;
/* set in omUpdateInfo(), needs malloc support */
49
long
MaxBytesFromMalloc
;
/* always kept up-to-date */
50
long
CurrentBytesFromMalloc
;
/* always kept up-to-date */
51
long
MaxBytesFromValloc
;
/* always kept up-to-date */
52
long
CurrentBytesFromValloc
;
/* always kept up-to-date */
53
long
UsedBytesFromValloc
;
/* set in omUpdateInfo() */
54
long
AvailBytesFromValloc
;
/* set in omUpdateInfo() */
55
long
MaxPages
;
/* always kept up-to-date */
56
long
UsedPages
;
/* always kept up-to-date */
57
long
AvailPages
;
/* always kept up-to-date */
58
long
MaxRegionsAlloc
;
/* always kept up-to-date */
59
long
CurrentRegionsAlloc
;
/* always kept up-to-date */
60
};
61
62
extern
struct
omInfo_s
om_Info
;
63
64
struct
omOpts_s
;
65
extern
struct
omOpts_s
66
{
67
int
MinTrack
;
68
int
MinCheck
;
69
int
MaxTrack
;
70
int
MaxCheck
;
71
int
Keep
;
72
int
HowToReportErrors
;
73
int
MarkAsStatic
;
74
unsigned
int
PagesPerRegion
;
75
void (*
OutOfMemoryFunc
)();
76
void (*
MemoryLowFunc
)();
77
void (*
ErrorHook
)();
78
}
om_Opts
;
79
80
typedef
struct
omOpts_s
omOpts_t;
81
82
extern
int
om_sing_opt_show_mem
;
83
84
#define omalloc(s) malloc(s)
85
#define omAlloc(s) malloc(s)
86
87
static
inline
void
*
omAlloc0
(
size_t
s
)
88
{
void
*d=
malloc
(
s
);memset(d,0,
s
);
return
d; }
89
static
inline
void
*
omalloc0
(
size_t
s
)
90
{
if
(
s
!=0) {
void
*d=
malloc
(
s
);memset(d,0,
s
);
return
d;}
else
return
NULL
; }
91
92
static
inline
void
*
omRealloc0Size
(
void
*d,
__attribute__
((unused))
size_t
os,
size_t
ns)
93
{
if
(d==
NULL
)
94
return
omAlloc0
(ns);
95
else
96
{
97
char
*
p
=(
char
*)
realloc
(d,ns);
98
if
(ns>os) memset(
p
+os,0,ns-os);
99
return
(
void
*)
p
;
100
}
101
}
102
103
#define omfree(d) free(d)
104
#define omFree(d) free(d)
105
#define omFreeSize(d,s) free(d)
106
107
#define omStrDup(s) strdup(s)
108
109
#ifdef XALLOC_BIN
110
typedef
struct
omBin_next_s
omBin_next_t;
111
typedef
omBin_next_t*
omBin_next
;
112
struct
omBin_next_s
113
{
114
omBin_next
next
;
115
};
116
117
struct
omBin_s
118
{
119
omBin_next
curr
;
/* current freelist */
120
size_t
size
;
/* size in bytes */
121
};
122
typedef
struct
omBin_s
omBin_t;
123
typedef
omBin_t*
omBin
;
124
#define omSizeWOfBin(bin_ptr) (((bin_ptr->size)+SIZEOF_LONG-1)/SIZEOF_LONG)
125
static
inline
void
*
omAllocBin
(
omBin
b
)
126
{
127
if
(
b
->curr!=
NULL
)
128
{
129
omBin_next
p
=
b
->curr;
130
b
->curr=
p
->next;
131
return
p
;
132
}
133
else
return
omAlloc
(
b
->size);
134
}
135
static
inline
void
*
omAlloc0Bin
(
omBin
b
)
136
{
137
if
(
b
->curr!=
NULL
)
138
{
139
omBin_next
p
=
b
->curr;
140
b
->curr=
p
->next;
141
memset(
p
,0,
b
->size);
142
return
p
;
143
}
144
else
return
omAlloc0
(
b
->size);
145
}
146
static
inline
void
omFreeBin
(
void
*
p
,
omBin
b
)
147
{
148
*((
void
**)
p
) =
b
->curr;
149
b
->curr=(
omBin_next
)
p
;
150
}
151
152
#define omTypeAllocBin(T,P,B) P=(T)omAllocBin(B)
153
#define omTypeAlloc0Bin(T,P,B) P=(T)omAlloc0Bin(B)
154
static
inline
omBin
omGetSpecBin
(
size_t
s
)
155
{
156
omBin
b
=(
omBin
)
omAlloc
(
sizeof
(*
b
));
157
b
->size=
s
;
158
b
->curr=
NULL
;
159
return
b
;
160
}
161
static
inline
void
omUnGetSpecBin
(
omBin
*
A
)
162
{
163
omBin_next
p
=(*A)->curr;
164
omBin_next
pp
;
165
while
(
p
!=
NULL
)
166
{
167
pp
=
p
->next;
168
omFree
(
p
);
169
p
=
pp
;
170
}
171
(*A)->curr=
NULL
;
172
omFree
(*
A
);
173
}
174
175
#else
176
177
typedef
size_t
omBin
;
178
#define omSizeWOfBin(bin_ptr) (((bin_ptr)+SIZEOF_LONG-1)/SIZEOF_LONG)
179
#define omTypeAllocBin(T,P,B) P=(T)omAlloc(B)
180
#define omTypeAlloc0Bin(T,P,B) P=(T)omAlloc0(B)
181
#define omAllocBin(B) omAlloc(B)
182
#define omAlloc0Bin(B) omAlloc0(B)
183
#define omFreeBin(P,B) omFree(P)
184
#define omGetSpecBin(A) (A)
185
#define omUnGetSpecBin(A) do {} while (0)
186
#endif
187
188
/*******************************************************************
189
*
190
* error codes
191
*
192
*******************************************************************/
193
enum
omError_e
194
{
195
omError_NoError
= 0,
196
omError_Unknown
,
197
omError_InternalBug
,
198
omError_MemoryCorrupted
,
199
omError_NullAddr
,
200
omError_InvalidRangeAddr
,
201
omError_FalseAddr
,
202
omError_FalseAddrOrMemoryCorrupted
,
203
omError_WrongSize
,
204
omError_FreedAddr
,
205
omError_FreedAddrOrMemoryCorrupted
,
206
omError_WrongBin
,
207
omError_UnknownBin
,
208
omError_NotBinAddr
,
209
omError_UnalignedAddr
,
210
omError_NullSizeAlloc
,
211
omError_ListCycleError
,
212
omError_SortedListError
,
213
omError_KeptAddrListCorrupted
,
214
omError_FreePattern
,
215
omError_BackPattern
,
216
omError_FrontPattern
,
217
omError_NotString
,
218
omError_StickyBin
,
219
omError_MaxError
220
};
221
// typedef enum omError_e omError_t;
222
223
#define omSizeWOfAddr(P) (omSizeOfAddr(P)/SIZEOF_LONG)
224
225
#define omTypeAlloc(T,P,S) P=(T)omAlloc(S)
226
#define omAlloc0Aligned(S) omAlloc0(S)
227
#define omAllocAligned(S) omAlloc(S)
228
#define omInitInfo()
229
#define omInitGetBackTrace()
230
#define omUpdateInfo()
231
#define omPrintStats(F)
232
#define omPrintInfo(F)
233
#define omPrintBinStats(F)
234
#define omMarkMemoryAsStatic()
235
#define omfreeSize(P,S) free(P)
236
#define omFreeFunc free
237
#define omFreeBinAddr(P) free(P)
238
#define omrealloc(A,NS) realloc(A,NS)
239
#define omreallocSize(A,OS,NS) realloc(A,NS)
240
#define omrealloc0Size(A,OS,NS) omRealloc0Size(A,OS,NS)
241
#define omRealloc(A,B) realloc(A,B)
242
#define omReallocAligned(A,B) realloc(A,B)
243
#define omReallocSize(A,B,C) realloc(A,C)
244
#define omReallocAlignedSize(A,B) realloc(A,B)
245
#define omMarkAsStaticAddr(A)
246
#define omMemcpyW(A,B,C) memcpy(A,B,(C)*SIZEOF_LONG)
247
#define omGetStickyBinOfBin(B) (B)
248
249
250
/* debug dummies: */
251
#define omTypeReallocAlignedSize omTypeReallocSize
252
#define omTypeRealloc0AlignedSize omTypeRealloc0Size
253
#define omRealloc0AlignedSize omRealloc0Size
254
#define omMemDupAligned omMemDup
255
#define omCheckIf(cond, test) do {} while (0)
256
#define omCheckBinAddr(addr) do {} while (0)
257
#define omCheckAddrBin(addr,bin) do {} while (0)
258
#define omCheckBinAddrSize(addr,size) do {} while (0)
259
#define omCheckAddrSize(addr,size) do {} while (0)
260
#define omCheckAddr(addr) do {} while (0)
261
#define omcheckAddrSize(addr,size) do {} while (0)
262
#define omcheckAddr(addr) do {} while (0)
263
#define omCheckBin(bin) do {} while (0)
264
#define omCheckMemory() do {} while (0)
265
#define omPrintCurrentBackTraceMax(A,B) do {} while (0)
266
#define omPrintUsedTrackAddrs(F,max) do {} while (0)
267
#define omPrintCurrentBackTrace(F) do {} while (0)
268
#define omPrintUsedAddrs(F,max) do {} while (0)
269
#define omdebugAddrSize(A,B) do {} while (0)
270
#define omPrintAddrInfo(A,B,C) do {} while (0)
271
#define omIsBinPageAddr(A) (1)
272
#define omTestBinAddrSize(A,B,C) (omError_NoError)
273
#define omTestList(ptr, level) (omError_NoError)
274
#define omInitRet_2_Info(argv0) do {} while (0)
275
#define omMergeStickyBinIntoBin(A,B) do {} while (0)
276
277
278
#ifdef __cplusplus
279
}
280
#endif
281
282
#undef OMALLOC_USES_MALLOC
283
#define X_OMALLOC
284
#define omMallocFunc malloc
285
#define omFreeSizeFunc omFreeSize
286
#define omReallocSizeFunc realloc
287
/* #define OM_NDEBUG */
288
#undef OM_SING_KEEP
289
290
#endif
pp
CanonicalForm FACTORY_PUBLIC pp(const CanonicalForm &)
CanonicalForm pp ( const CanonicalForm & f ).
Definition
cf_gcd.cc:676
p
int p
Definition
cfModGcd.cc:4086
b
CanonicalForm b
Definition
cfModGcd.cc:4111
s
const CanonicalForm int s
Definition
facAbsFact.cc:51
__attribute__
#define __attribute__(x)
Definition
mod2.h:429
omAllocBin
#define omAllocBin(bin)
Definition
omAllocDecl.h:205
omAlloc0Bin
#define omAlloc0Bin(bin)
Definition
omAllocDecl.h:206
omalloc0
#define omalloc0(size)
Definition
omAllocDecl.h:229
omAlloc0
#define omAlloc0(size)
Definition
omAllocDecl.h:211
omFreeBin
#define omFreeBin(addr, bin)
Definition
omAllocDecl.h:259
omRealloc0Size
#define omRealloc0Size(addr, o_size, size)
Definition
omAllocDecl.h:221
realloc
#define realloc
Definition
omAllocFunc.c:16
malloc
#define malloc
Definition
omAllocFunc.c:12
omGetSpecBin
#define omGetSpecBin(size)
Definition
omBin.h:11
omUnGetSpecBin
#define omUnGetSpecBin(bin_ptr)
Definition
omBin.h:14
omError_e
omError_e
Definition
omError.h:17
omError_WrongSize
@ omError_WrongSize
Definition
omError.h:26
omError_ListCycleError
@ omError_ListCycleError
Definition
omError.h:34
omError_BackPattern
@ omError_BackPattern
Definition
omError.h:38
omError_NullAddr
@ omError_NullAddr
Definition
omError.h:22
omError_NullSizeAlloc
@ omError_NullSizeAlloc
Definition
omError.h:33
omError_MaxError
@ omError_MaxError
Definition
omError.h:42
omError_FrontPattern
@ omError_FrontPattern
Definition
omError.h:39
omError_UnalignedAddr
@ omError_UnalignedAddr
Definition
omError.h:32
omError_MemoryCorrupted
@ omError_MemoryCorrupted
Definition
omError.h:21
omError_FreedAddr
@ omError_FreedAddr
Definition
omError.h:27
omError_UnknownBin
@ omError_UnknownBin
Definition
omError.h:30
omError_FreedAddrOrMemoryCorrupted
@ omError_FreedAddrOrMemoryCorrupted
Definition
omError.h:28
omError_NotString
@ omError_NotString
Definition
omError.h:40
omError_SortedListError
@ omError_SortedListError
Definition
omError.h:35
omError_KeptAddrListCorrupted
@ omError_KeptAddrListCorrupted
Definition
omError.h:36
omError_InternalBug
@ omError_InternalBug
Definition
omError.h:20
omError_NotBinAddr
@ omError_NotBinAddr
Definition
omError.h:31
omError_InvalidRangeAddr
@ omError_InvalidRangeAddr
Definition
omError.h:23
omError_FalseAddr
@ omError_FalseAddr
Definition
omError.h:24
omError_WrongBin
@ omError_WrongBin
Definition
omError.h:29
omError_NoError
@ omError_NoError
Definition
omError.h:18
omError_Unknown
@ omError_Unknown
Definition
omError.h:19
omError_StickyBin
@ omError_StickyBin
Definition
omError.h:41
omError_FreePattern
@ omError_FreePattern
Definition
omError.h:37
omError_FalseAddrOrMemoryCorrupted
@ omError_FalseAddrOrMemoryCorrupted
Definition
omError.h:25
NULL
#define NULL
Definition
omList.c:12
om_Opts
omOpts_t om_Opts
Definition
omOpts.c:13
om_Info
omInfo_t om_Info
Definition
omStats.c:16
omBin
omBin_t * omBin
Definition
omStructs.h:12
om_sing_opt_show_mem
int om_sing_opt_show_mem
A
#define A
Definition
sirandom.c:24
omInfo_s::UsedBytesMalloc
long UsedBytesMalloc
Definition
omStats.h:20
omOpts_s::MinCheck
int MinCheck
Definition
omOpts.h:14
omInfo_s::CurrentBytesFromValloc
long CurrentBytesFromValloc
Definition
omStats.h:26
omBin_s::size
size_t size
Definition
xalloc.h:120
omOpts_s::MemoryLowFunc
void(* MemoryLowFunc)(void)
Definition
omOpts.h:22
omFree
#define omFree(d)
Definition
xalloc.h:104
omInfo_s::CurrentBytesFromMalloc
long CurrentBytesFromMalloc
Definition
omStats.h:24
omOpts_s::Keep
int Keep
Definition
omOpts.h:17
omInfo_s::AvailBytesMalloc
long AvailBytesMalloc
Definition
omStats.h:22
omBin_next_s::next
omBin_next next
Definition
xalloc.h:114
omInfo_s::CurrentBytesMmap
long CurrentBytesMmap
Definition
omStats.h:17
omInfo_s::AvailPages
long AvailPages
Definition
omStats.h:31
omOpts_s::MinTrack
int MinTrack
Definition
omOpts.h:13
omInfo_s::CurrentRegionsAlloc
long CurrentRegionsAlloc
Definition
omStats.h:33
omBin_s::curr
omBin_next curr
Definition
xalloc.h:119
omInfo_s::UsedBytesFromValloc
long UsedBytesFromValloc
Definition
omStats.h:27
omBin_next
omBin_next_t * omBin_next
Definition
xalloc.h:111
omInfo_s::MaxBytesFromValloc
long MaxBytesFromValloc
Definition
omStats.h:25
omInfo_s::MaxPages
long MaxPages
Definition
omStats.h:29
omAlloc
#define omAlloc(s)
Definition
xalloc.h:85
omOpts_s::HowToReportErrors
int HowToReportErrors
Definition
omOpts.h:18
omInfo_s::CurrentBytesSystem
long CurrentBytesSystem
Definition
omStats.h:13
omOpts_s::MarkAsStatic
int MarkAsStatic
Definition
omOpts.h:19
omOpts_s::OutOfMemoryFunc
void(* OutOfMemoryFunc)(void)
Definition
omOpts.h:21
omInfo_s::AvailBytesFromValloc
long AvailBytesFromValloc
Definition
omStats.h:28
omInfo_s::MaxBytesSbrk
long MaxBytesSbrk
Definition
omStats.h:14
omOpts_s::MaxTrack
int MaxTrack
Definition
omOpts.h:15
omInfo_s::MaxRegionsAlloc
long MaxRegionsAlloc
Definition
omStats.h:32
omInfo_s::UsedPages
long UsedPages
Definition
omStats.h:30
omOpts_s::PagesPerRegion
unsigned int PagesPerRegion
Definition
omOpts.h:20
omInfo_s::UsedBytes
long UsedBytes
Definition
omStats.h:18
omInfo_s::MaxBytesFromMalloc
long MaxBytesFromMalloc
Definition
omStats.h:23
omInfo_s::CurrentBytesSbrk
long CurrentBytesSbrk
Definition
omStats.h:15
omInfo_s::MaxBytesMmap
long MaxBytesMmap
Definition
omStats.h:16
omInfo_s::MaxBytesSystem
long MaxBytesSystem
Definition
omStats.h:12
omInfo_s::AvailBytes
long AvailBytes
Definition
omStats.h:19
omOpts_s::ErrorHook
void(* ErrorHook)(void)
Definition
omOpts.h:23
omOpts_s::MaxCheck
int MaxCheck
Definition
omOpts.h:16
omBin_next_s
Definition
xalloc.h:113
omBin_s
Definition
omAllocPrivate.h:37
omInfo_s
Definition
omStats.h:11
omOpts_s
Definition
omOpts.h:12
Generated on
for My Project by
doxygen 1.17.0
for
Singular