File: memory.h

package info (click to toggle)
funnelweb 3.2-4.2
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 2,744 kB
  • sloc: ansic: 9,156; makefile: 17
file content (117 lines) | stat: -rw-r--r-- 6,595 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*##############################################################################

FUNNNELWEB COPYRIGHT
====================
FunnelWeb is a literate-programming macro preprocessor.
The FunnelWeb web is at http://www.ross.net/funnelweb/

Copyright (c) Ross N. Williams 1992. All rights reserved.

This program is free software; you can redistribute it and/or modify
it under the terms of Version 2 of the GNU General Public License as
published by the Free Software Foundation (http://www.gnu.org/).

This program is distributed WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See Version 2 of the GNU General Public License for more details.

You should have received a copy of Version 2 of the GNU General Public
License along with this program. If not, you can obtain a copy as follows:
   ftp://prep.ai.mit.edu/pub/gnu/COPYING-2.0
or write to:
    Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA  02111-1307, USA

Section 2a of the license requires that all changes to this file be
recorded prominently in this file. Please record all changes here.

Programmers:
   RNW  Ross N. Williams (ross@ross.net)

Changes:
   07-May-1992  RNW  Program prepared for release under GNU GPL V2.

##############################################################################*/


/******************************************************************************/
/*                                  MEMORY.H                                  */
/******************************************************************************/
/*                                                                            */
/* Introduction                                                               */
/* ------------                                                               */
/* This package provides a memory management facility for FunnelWeb.          */
/* The conventional MALLOC does not suit the needs of FunnelWeb. The          */
/* following notes give an idea of why:                                       */
/*                                                                            */
/* 1. At the times where FunnelWeb requires memory, it is nearly always       */
/*    the case that failure to provide the memory should result in a bomb.    */
/*    It therefore makes sense to wrap MALLOC up inside another function      */
/*    that, at the very least, checks the status from malloc and bombs        */
/*    the program if the requested memory is not available.                   */
/*                                                                            */
/* 2. Because FunnelWeb proper can be invoked an indefinite number of         */
/*    times from the FunnelWeb command interpreter, it is very important      */
/*    to reclaim all the memory used by each invocation. This could be        */
/*    done by explicitly tearing apart the data structures constructed        */
/*    for each run. However, this is very messy, requiring detailed           */
/*    knowledge of the data structures. A far simpler, safer scheme is to     */
/*    arrange for a memory manager to keep track of all the memory that it    */
/*    allocates and to provide a single call to free it all. This facility    */
/*    is provided by this package.                                            */
/*                                                                            */
/* 3. In addition to the TEMPORARY memory allocations described in (2) above, */
/*    it should also be possible to make permanent allocations.               */
/*                                                                            */
/* 4. FunnelWeb uses linked lists a lot and hence will make many requests     */
/*    for small chunks of memory (e.g 10 bytes). Legend has it that some      */
/*    malloc libraries are very inefficient in this case, and that it is      */
/*    better to use malloc to allocate a large chunk of memory and dole it    */
/*    out yourself. This package does this too.                               */
/*                                                                            */
/* For all these reasons, FunnelWeb memory management has been handed over to */
/* this package which provides services that satisfy the conditions outlined  */
/* above.                                                                     */
/*                                                                            */
/******************************************************************************/

/* Ensure that the body of this header file is included at most once.         */
#ifndef DONE_MEMORY
#define DONE_MEMORY

/******************************************************************************/

#include "style.h"

/******************************************************************************/

EXPORT p_void mm_perm P_((size_t));
/* Allocates a block of memory of the specified size (specified in bytes) and */
/* returns a pointer to the new block of memory. Bombs the program if the     */
/* memory is not available. Memory allocated using mm_perm is permanently     */
/* allocated and cannot be freed.                                             */

EXPORT p_void mm_temp P_((size_t));
/* Allocates a block of memory of the specified size (specified in bytes) and */
/* returns a pointer to the new block of memory. Bombs the program if the     */
/* memory is not available. Memory allocated using this function can later be */
/* freed in its entirely by making a call to mm_zapt.                         */

EXPORT void mm_zapt P_((void));
/* This function can be called at any time. Its effect is to free up all the  */
/* memory allocated using mm_temp since the last call to mm_zapt or the start */
/* of the program, whichever is the more recent.                              */

EXPORT void mm_repo P_((void));
/* This function can be called at any time. It writes to standard output a    */
/* report describing the amount of memory used and the distribution of the    */
/* sizes of blocks.                                                           */

/******************************************************************************/

/* For #ifndef preventing multiple inclusion of the body of this header file. */
#endif

/******************************************************************************/
/*                               End of MEMORY.H                              */
/******************************************************************************/