00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00028 #ifndef __RTXMEMORY_H__
00029 #define __RTXMEMORY_H__
00030
00031 #include "rtxsrc/rtxCommon.h"
00032 #include "rtxsrc/rtxSysTypes.h"
00033
00034 #define RT_MH_DONTKEEPFREE 0x1
00035
00036 #define OSRTMH_PROPID_DEFBLKSIZE 1
00037 #define OSRTMH_PROPID_SETFLAGS 2
00038 #define OSRTMH_PROPID_CLEARFLAGS 3
00039
00040 #define OSRTMH_PROPID_USER 10
00041
00042 #ifndef OSRTXM_K_MEMBLKSIZ
00043 #define OSRTXM_K_MEMBLKSIZ (4*1024)
00044 #endif
00045
00059 #define OSRTALLOCTYPE(pctxt,type) \
00060 (type*) rtxMemHeapAlloc (&(pctxt)->pTypeMemHeap, sizeof(type))
00061
00068 #define OSRTALLOCTYPEZ(pctxt,type) \
00069 (type*) rtxMemHeapAllocZ (&(pctxt)->pTypeMemHeap, sizeof(type))
00070
00076 #define OSRTARRAYSIZE(x) (sizeof(x)/sizeof(x[0]))
00077
00078 #ifndef _NO_MALLOC
00079 #define OSCRTMALLOC0(nbytes) malloc(nbytes)
00080 #define OSCRTFREE0(ptr) free(ptr)
00081 #else
00082
00083 #ifdef _NO_THREADS
00084 extern EXTERNRTX OSCTXT g_ctxt;
00085
00086 #define OSCRTMALLOC0(nbytes) rtxMemAlloc(&g_ctxt,(nbytes))
00087 #define OSCRTFREE0(ptr) rtxMemFreePtr(&g_ctxt,(ptr))
00088 #else
00089 #define OSCRTMALLOC0(nbytes) (void*)0
00090 #define OSCRTFREE0(ptr) (void*)0
00091
00092 #endif
00093 #endif
00094
00095 #define OSCRTMALLOC OSMALLOC
00096 #define OSCRTFREE OSFREEPTR
00097
00098 struct OSRTDList;
00099
00100 #ifdef __cplusplus
00101 extern "C" {
00102 #endif
00103
00104
00105
00106
00107 #if !defined(OSCDECL)
00108 #if defined(_MSC_VER) || defined(__BORLANDC__)
00109 #define OSCDECL __cdecl
00110 #else
00111 #define OSCDECL
00112 #endif
00113 #endif
00114
00115
00116
00117
00118 typedef void *(OSCDECL *OSMallocFunc ) (size_t size);
00119 typedef void *(OSCDECL *OSReallocFunc) (void *ptr, size_t size);
00120 typedef void (OSCDECL *OSFreeFunc ) (void *ptr);
00121
00122 #ifdef _RT_ALLOC_FUNC_WITH_CONTEXT
00123
00124
00125
00126
00127
00128 typedef void *(OSCDECL *OSMallocCtxtFunc ) (OSCTXT* pctxt, size_t size);
00129 typedef void *(OSCDECL *OSReallocCtxtFunc) (OSCTXT* pctxt, void *ptr, size_t size);
00130 typedef void (OSCDECL *OSFreeCtxtFunc ) (OSCTXT* pctxt, void *ptr);
00131
00132 #endif
00133
00134 EXTERNRTX void rtxMemHeapAddRef (void** ppvMemHeap);
00135 EXTERNRTX void* rtxMemHeapAlloc (void** ppvMemHeap, size_t nbytes);
00136 EXTERNRTX void* rtxMemHeapAllocZ (void** ppvMemHeap, size_t nbytes);
00137 EXTERNRTX int rtxMemHeapCheckPtr (void** ppvMemHeap, void* mem_p);
00138 EXTERNRTX int rtxMemHeapCreate (void** ppvMemHeap);
00139 EXTERNRTX void rtxMemHeapFreeAll (void** ppvMemHeap);
00140 EXTERNRTX void rtxMemHeapFreePtr (void** ppvMemHeap, void* mem_p);
00141 EXTERNRTX void* rtxMemHeapMarkSaved (void** ppvMemHeap,
00142 const void* mem_p,
00143 OSBOOL saved);
00144 EXTERNRTX void* rtxMemHeapRealloc (void** ppvMemHeap,
00145 void* mem_p, size_t nbytes_);
00146 EXTERNRTX void rtxMemHeapRelease (void** ppvMemHeap);
00147 EXTERNRTX void rtxMemHeapReset (void** ppvMemHeap);
00148 EXTERNRTX void rtxMemHeapSetProperty (void** ppvMemHeap,
00149 OSUINT32 propId, void* pProp);
00150
00151
00152
00168 EXTERNRTX void rtxMemSetAllocFuncs (OSMallocFunc malloc_func,
00169 OSReallocFunc realloc_func,
00170 OSFreeFunc free_func);
00171
00172 #ifdef _RT_ALLOC_FUNC_WITH_CONTEXT
00173
00174 EXTERNRTX void rtxMemSetAllocCtxtFuncs (OSMallocCtxtFunc malloc_func,
00175 OSReallocCtxtFunc realloc_func,
00176 OSFreeCtxtFunc free_func);
00177
00178 #endif
00179
00180 EXTERNRTX void rtxMemFreeOpenSeqExt
00181 (OSCTXT* pctxt, struct OSRTDList *pElemList);
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192 EXTERNRTX void rtxMemHeapSetFlags (OSCTXT* pctxt, OSUINT32 flags);
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202 EXTERNRTX void rtxMemHeapClearFlags (OSCTXT* pctxt, OSUINT32 flags);
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216 EXTERNRTX void rtxMemHeapSetDefBlkSize (OSCTXT* pctxt, OSUINT32 blkSize);
00217
00218
00219
00220
00221
00222
00223 EXTERNRTX OSUINT32 rtxMemHeapGetDefBlkSize (OSCTXT* pctxt);
00224
00233 EXTERNRTX OSBOOL rtxMemIsZero (const void* pmem, size_t memsiz);
00234
00235 #ifdef _STATIC_HEAP
00236 EXTERNRTX void rtxMemSetStaticBuf (void* memHeapBuf, OSUINT32 blkSize);
00237 #endif
00238
00239 #if !defined (_BUILDCRTLIB)
00240
00250 EXTERNRTX void* rtxMemAlloc (OSCTXT* pctxt, size_t nbytes);
00251
00262 EXTERNRTX void* rtxMemAllocZ (OSCTXT* pctxt, size_t nbytes);
00263
00272 EXTERNRTX void rtxMemFree (OSCTXT* pctxt);
00273
00282 EXTERNRTX void rtxMemFreePtr (OSCTXT* pctxt, void* mem_p);
00283
00299 EXTERNRTX void* rtxMemRealloc
00300 (OSCTXT* pctxt, void* mem_p, size_t oldnbytes, size_t nbytes);
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315 EXTERNRTX void rtxMemReset (OSCTXT* pctxt);
00316
00317 #else
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327 #define rtxMemAlloc(pctxt,nbytes) \
00328 rtxMemHeapAlloc(&(pctxt)->pTypeMemHeap,nbytes)
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339 #define rtxMemAllocZ(pctxt,nbytes) \
00340 rtxMemHeapAllocZ(&(pctxt)->pTypeMemHeap,nbytes)
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357 #define rtxMemRealloc(pctxt,mem_p,oldnbytes,nbytes) \
00358 rtxMemHeapRealloc(&(pctxt)->pTypeMemHeap, (void*)mem_p, nbytes)
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371 #define rtxMemFreePtr(pctxt,mem_p) \
00372 if (rtxMemHeapCheckPtr (&(pctxt)->pTypeMemHeap, (void*)mem_p)) \
00373 rtxMemHeapFreePtr(&(pctxt)->pTypeMemHeap, (void*)mem_p)
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383 #define rtxMemFree(pctxt) \
00384 rtxMemHeapFreeAll(&(pctxt)->pTypeMemHeap)
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400 #define rtxMemReset(pctxt) \
00401 rtxMemHeapReset(&(pctxt)->pTypeMemHeap)
00402 #endif
00403
00404 #define rtxMemAllocType(pctxt,type) \
00405 (type*) rtxMemAllocZ ((pctxt), sizeof(type))
00406
00407 #ifdef __cplusplus
00408 }
00409 #endif
00410
00413 #ifdef _STATIC_HEAP
00414 EXTERNRTX void rtxMemSetStaticBuf (void* memHeapBuf, OSUINT32 blkSize);
00415 #endif
00416
00417 #endif