source: git/Singular/mmprivate.h @ fdc537

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