|
|
1.1 root 1: .ds ZZ DEVELOPMENT PACKAGE
2: .TH GCALLOC 3R "630 MTG"
3: .XE "gcalloc()"
4: .XE "gcallocown()"
5: .XE "gcfree()"
6: .SH NAME
7: gcalloc, gcfree, gcallocown \- garbage compacting memory allocation
8: .SH SYNOPSIS
9: .B #include <dmd.h>
10: .sp
11: .B char \(**gcalloc (nbytes, where)
12: .PP
13: .B void gcfree (s)
14: .PP
15: .B void gcallocown (s, p)
16: .PP
17: .B unsigned long nbytes;
18: .br
19: .B long \(**\(**where;
20: .br
21: .B char \(**s;
22: .br
23: .B Proc \(**p;
24: .SH DESCRIPTION
25: The
26: .I gcalloc
27: function
28: provides a simple garbage-compacting memory allocator.
29: It returns either a pointer to a block of
30: .I nbytes
31: contiguous bytes of storage or a \s-1NULL\s+1 if unavailable.
32: The storage is not initialized to zeros.
33: The pointer
34: .I where
35: points to the location where the address of the
36: storage block is to be saved.
37: The contents of
38: .I where
39: will be updated after each compaction.
40: That is, if garbage collection occurs, your storage will be moved,
41: and your pointer will be changed to point to the new location of your
42: storage area.
43: Therefore, a program using
44: .I gcalloc
45: should never store the location of
46: gcallocated
47: memory anywhere other than the location handed to the allocator.
48: Typically, this location is contained in a structure such as a \fIBitmap\fR.
49: .PP
50: The
51: .I gcallocown
52: function
53: changes the owning process of the memory returned by
54: .IR gcalloc .
55: If
56: .I p
57: is zero, the memory will belong to no one and will only be freed by an explicit call to
58: .IR gcfree .
59: .PP
60: The
61: .I gcfree
62: function
63: frees the storage block at
64: \fIs\fR,
65: thus making it available for future allocation.
66: .PP
67: The terminal
68: automatically frees all memory \fIgcalloc\fR'ed and owned by a process
69: when the process terminates or when
70: the window it is running in is deleted.
71: However, it is recommended that a process free its garbage compactable
72: memory when the storage is no longer needed so that other
73: processes
74: will be able to use it.
75:
76: .SH EXAMPLE
77: These routines could be used for allocating and freeing space
78: used to store Points in a polygon.
79: .PP
80: .RS 3
81: .ft CM
82: .S -2
83: .nf
84: #include <dmd.h>
85:
86: Point *poly;
87:
88: Point *
89: polyalloc(n)
90: {
91: char *gcalloc();
92:
93: return (poly = (Point *)gcalloc(sizeof(Point)*n, &poly));
94: }
95:
96: polyfree( )
97: {
98: void gcfree();
99:
100: gcfree (poly);
101: }
102: .fi
103: .ft R
104: .S +2
105: .SH SEE ALSO
106: alloc(3R), balloc(3R), structures(3R).
107:
108: .SH DIAGNOSTICS
109: When garbage compaction is in effect, a small rectangle flashes on the
110: upper left corner of the terminal's screen.
111: .SH BUGS
112: If \f2gcalloc\f1 is called to attempt to allocate over 7000000
113: bytes, it will fail, but it may say it succeeded. If this
114: happens, the memory used by \f2gcalloc\f1 is corrupted and may
115: damage other programs running in the terminal.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.