source: git/Singular/mmprivate.h @ 416465

spielwiese
Last change on this file since 416465 was 416465, checked in by Olaf Bachmann <obachman@…>, 24 years ago
* bug-fixes from work with Thomas git-svn-id: file:///usr/local/Singular/svn/trunk@3826 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 4.6 KB
Line 
1#ifndef MM_PRIVAT_H
2#define MM_PRIVAT_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: mmprivate.h,v 1.16 1999-11-15 17:20:26 obachman Exp $ */
7/*
8* ABSTRACT
9*/
10#include <stdlib.h>
11#include "mod2.h"
12#include "structs.h"
13#ifdef MTRACK
14#include "mmbt.h"
15#endif
16
17#if defined(HAVE_ASO) && HAVE_ASO == 1
18#include "mmprivate.aso"
19#endif
20
21extern const char mm_IndexTable[];
22extern const size_t mm_mcbSizes[];
23#define mmGetSize( index ) mm_mcbSizes[index]
24
25#ifndef GENERATE_INDEX_TABLE
26#define mmGetIndex(size)                                        \
27 (size <= MAX_BLOCK_SIZE ? mm_IndexTable[(size -1) >> 2] : -1)
28#else /* GENERATE_INDEX_TABLE */
29int mmGetIndex( size_t );
30#endif /* ! GENERATE_INDEX_TABLE */
31
32#if defined(MDEBUG) || defined(GENERATE_INDEX_TABLE)
33
34#define MM_NUMBER_OF_FRONT_PATTERNS   4
35typedef struct DBMCB
36{
37  void* _nnext;
38  struct DBMCB * next;
39  struct DBMCB * prev;
40  char * allocated_fname;
41  char * freed_fname;
42#ifdef MTRACK
43  unsigned long bt_allocated_stack[BT_MAXSTACK];
44#ifdef MTRACK_FREE
45  unsigned long bt_freed_stack[BT_MAXSTACK];
46#endif
47#endif
48  size_t size;
49  int allocated_lineno;
50  int freed_lineno;
51  int flags;
52  memHeap heap;
53  char front_pattern[MM_NUMBER_OF_FRONT_PATTERNS];
54  void* data;
55} DBMCB;
56
57typedef DBMCB * pDBMCB;
58
59#define DebugOffsetFront (sizeof(DBMCB) - sizeof(void*))
60#define DebugOffsetBack SIZEOF_VOIDP
61
62#define SizeFromRealSize( size ) (size - DebugOffsetFront - DebugOffsetBack)
63#define RealSizeFromSize( size ) (size + DebugOffsetFront + DebugOffsetBack)
64
65
66extern DBMCB mm_theDBused;
67extern DBMCB mm_theDBfree;
68
69extern void * mm_maxAddr;
70extern void * mm_minAddr;
71
72#define MM_INITFLAG 2
73#define MM_FREEFLAG 4
74#define MM_USEDFLAG 8
75#define MM_CURRENTLY_USEDFLAG 16
76#define MM_REFERENCEFLAG 32
77
78void mmPrintFL( const char* fname, const int lineno );
79void mmDBInitNewHeapPage(memHeap heap, memHeapPage page);
80int mmCheckDBMCB ( DBMCB * what, int size , int flags);
81void mmFillDBMCB(DBMCB* what, size_t size, memHeap heap,
82                 int flags, char* fname, int lineno);
83void mmDBSetHeapsOfBlocks(memHeap fromheap, memHeap toheap);
84void mmTakeOutDBMCB (DBMCB* what );
85void mmMoveDBMCB ( pDBMCB from, pDBMCB to, DBMCB * what );
86void mmMoveDBMCBInto ( pDBMCB to, pDBMCB what );
87
88#else /* ! MDEBUG */
89
90#define SizeFromRealSize( size ) (size)
91#define RealSizeFromSize( size ) (size)
92
93#endif /* MDEBUG */
94
95/* Malloc and Free from/to system */
96void* mmMallocFromSystem(size_t size);
97void* mmReallocFromSystem(void* addr, size_t new_size, size_t old_size);
98void  mmFreeToSystem(void* addr, size_t size);
99
100void* mmVallocFromSystem(size_t size);
101void  mmVfreeToSystem(void* page, size_t size);
102
103extern int mm_bytesMalloc;
104extern int mm_bytesValloc;
105#ifdef HAVE_SBRK
106extern unsigned long mm_SbrkInit;
107#endif
108
109void mmCheckPrint( void );
110
111#define MM_PRINT_ALL_ADDR 1
112#define MM_PRINT_ALL_STACK 2
113
114/**********************************************************************
115 *
116 * Low-level heap routines
117 *
118 **********************************************************************/
119/* size of max cunk of memory which is treated by "normal" (static) heaps */
120#define MAX_BLOCK_SIZE  (((SIZE_OF_HEAP_PAGE) / 16)*4)
121
122/* For Heap whose chunk size is greater than SIZE_OF_MAX_HEAP_CHUNK,
123   AllocHeap defaults to Alloc and heap->page is counter of allocted chunks */
124#ifndef MDEBUG
125#define MAX_HEAP_CHUNK_SIZE MAX_BLOCK_SIZE
126#else
127#define MAX_HEAP_CHUNK_SIZE RealSizeFromSize(MAX_BLOCK_SIZE)
128#endif
129
130#define mmGetHeapPageOfAddr(addr) (memHeapPage) mmGetPageOfAddr(addr)
131
132/* creates and initializes heap */
133extern memHeap mmCreateHeap(size_t size);
134
135#ifndef HEAP_DEBUG
136/* UNCONDITIONALLY frees all pages of heap */
137extern void mmClearHeap(memHeap heap);
138/* UNCONDITIONALLY Clears and destroys heap */
139extern void mmDestroyHeap(memHeap *heap);
140#else
141#define mmClearHeap(h)   mmDebugClearHeap(h, __FILE__, __LINE__)
142#define mmDestroyHeap(h) mmDebugDestroyHeap(h, __FILE__, __LINE__)
143void mmDebugClearHeap(memHeap heap, const char* fn, int line);
144void mmDebugDestroyHeap(memHeap *heap, const char* fn, int line);
145#endif
146
147/**********************************************************************
148 *
149 * Heap Management
150 *
151 **********************************************************************/
152struct sip_memSpecHeap;
153typedef struct sip_memSpecHeap ip_memSpecHeap;
154typedef struct sip_memSpecHeap* memSpecHeap;
155
156struct sip_memSpecHeap
157{
158  memSpecHeap       next; /* pointer to next heap */
159  memHeap           heap;  /* pointer to heap itself */
160  size_t            size;  /* size of heap */
161  int               ref;   /* ref count */
162};
163
164 
165#endif /* MM_PRIVATE_H */
166
Note: See TracBrowser for help on using the repository browser.