source: git/Singular/mmheap.c @ d2b2a7

spielwiese
Last change on this file since d2b2a7 was e9ce4c, checked in by Hans Schönemann <hannes@…>, 26 years ago
* hannes: modified mm*.c: better use of memory slack, minor optimizations mmallocb.c mmallocs.c mmblock.c mmheap.c mmprivat.h mmspec.c git-svn-id: file:///usr/local/Singular/svn/trunk@907 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.0 KB
Line 
1/****************************************
2*  Computer Algebra System SINGULAR     *
3****************************************/
4/* $Id: mmheap.c,v 1.3 1997-11-18 16:10:44 Singular Exp $ */
5
6/*
7* ABSTRACT:
8*/
9
10#define _POSIX_SOURCE 1
11
12#include <stdlib.h>
13#include "mod2.h"
14#include "febase.h"
15#include "mmemory.h"
16#include "mmprivat.h"
17
18static char * mm_theHeapPtr = NULL;
19static char * mm_tmpHeapPtr = NULL;
20static char * mm_normHeapPtr = NULL;
21
22static int mm_theBytesLeft = 0;
23static int mm_tmpBytesLeft = 0;
24static int mm_normBytesLeft = 0;
25
26static status_t mm_heapStatus = MM_NORMAL;
27
28static void mmDistributeRestOfHeap( void );
29
30void* mmGetMemory( size_t size )
31{
32  void * dummy;
33
34  if ( mm_theBytesLeft < size )
35  {
36    mmDistributeRestOfHeap();
37    mm_theHeapPtr = (char*)mmGetBlock();
38    mm_theBytesLeft = MAXDATA;
39  }
40  dummy = (void*)mm_theHeapPtr;
41  mm_theBytesLeft -= size;
42  mm_theHeapPtr += size;
43  return dummy;
44}
45
46BOOLEAN mmPutMemory( void *adr, size_t size )
47{
48  void * dummy=(void *)((char *)adr+size);
49
50  if ( dummy == mm_theHeapPtr)
51  {
52    mm_theHeapPtr=(char *)adr;
53    mm_theBytesLeft += size;
54    return TRUE;
55  }
56  return FALSE;
57}
58
59#ifndef MDEBUG
60
61static void mmDistributeRestOfHeap( void )
62{
63
64  char* dummy;
65  int j;
66
67  while ( mm_theBytesLeft > RealSizeFromSize( mmGetSize( 0 ) ) )
68  {
69    j = mmGetIndex( SizeFromRealSize( mm_theBytesLeft ) );
70    if ( RealSizeFromSize( mmGetSize( j ) ) > mm_theBytesLeft ) j--;
71    dummy = mm_theHeapPtr;
72    mm_theHeapPtr += RealSizeFromSize( mmGetSize( j ) );
73    mm_theBytesLeft -= RealSizeFromSize( mmGetSize( j ) );
74    *(mcb)dummy = mm_theList[j];
75    mm_theList[j] = (mcb)dummy;
76  }
77}
78
79#else /* MDEBUG */
80
81static void mmDistributeRestOfHeap( void )
82{
83/*
84*  void* dummy;
85*  int j;
86*
87*  while ( mm_theBytesLeft > RealSizeFromSize( mmGetSize( 0 ) ) ) {
88*    j = mmGetIndex( SizeFromRealSize( mm_theBytesLeft ) );
89*    if ( RealSizeFromSize( mmGetSize( j ) ) > mm_theBytesLeft ) j--;
90*    dummy = mmAllocBlock( mmGetSize( j ) );
91*    mmFreeBlock( &dummy, mmGetSize( j ) );
92*  }
93*/
94}
95
96#endif /* MDEBUG */
Note: See TracBrowser for help on using the repository browser.