https://github.com/Unipisa/CMM
Raw File
Tip revision: bf76b38a16a1c7c2b9b54c40b3d6e1471fe79c7b authored by Giuseppe Attardi on 02 November 1995, 15:11:11 UTC
1.5 -
Tip revision: bf76b38
SPE.ps
%!PS-Adobe-2.0
%%Creator: dvips 5.521 Copyright 1986, 1993 Radical Eye Software
%%Title: SPE.dvi
%%CreationDate: Thu Nov  2 18:02:34 1995
%%Pages: 26
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%EndComments
%DVIPSCommandLine: dvips SPE.dvi -o
%DVIPSSource:  TeX output 1995.11.02:1802
%%BeginProcSet: tex.pro
/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get
round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{
statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0
0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn
begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X
array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo
setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx
FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{
pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp
0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{
ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn
/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1
sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D
}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0
moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave
transform round exch round exch itransform moveto rulex 0 rlineto 0
ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{
3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p
-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{
3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end
%%EndProcSet
%%BeginProcSet: special.pro
TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
true def end /@MacSetUp{userdict /md known{userdict /md get type
/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
clippath mark{transform{itransform moveto}}{transform{itransform lineto}
}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
maxlength dict begin /magscale false def normalscale currentpoint TR
/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
begin /SpecialSave save N gsave normalscale currentpoint TR
@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
%%EndProcSet
TeXDict begin 39158280 55380996 1000 300 300
(/local/disc1/home/attardi/Paper/CMM/SPE.dvi) @start
/Fa 11 122 df<F0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF000
1EF0001EF0001EF0001EF0001EF0001EFFFFFEFFFFFEFFFFFEF0001EF0001EF0001EF000
1EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF000
1EF0001E17237BA222>72 D<07E01FF83FFC381E201E000F000F000F000F00FF07FF1FFF
3E0F780FF00FF00FF00FF00FF83F7FFF3FEF1F8F10167E9517>97
D<01FC0007FF000FFF801F03803C0180780000780000700000F00000F00000F00000F000
00F00000F000007800007800007800003C00401F03C00FFFC007FF8001FC0012167E9516
>99 D<0003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0
0003C00003C003E3C00FFBC01FFFC03F0FC03C07C07803C07803C0F003C0F003C0F003C0
F003C0F003C0F003C0F003C0F003C07803C07803C03C07C03E0FC01FFFC00FFBC003E3C0
12237EA219>I<03F00007FC001FFE003E0F003C0780780380780380F001C0FFFFC0FFFF
C0FFFFC0F00000F00000F000007000007800007800003C00801F07800FFF8007FF0001F8
0012167E9516>I<003F00FF01FF03C0038007800780078007800780078007800780FFF8
FFF8FFF80780078007800780078007800780078007800780078007800780078007800780
078007800780102380A20F>I<F0F807C0F3FE1FF0F7FF3FF8FE0F7078FC0FE07CF807C0
3CF807C03CF007803CF007803CF007803CF007803CF007803CF007803CF007803CF00780
3CF007803CF007803CF007803CF007803CF007803CF007803CF007803C1E167C9527>
109 D<01FC0007FF000FFF801F07C03C01E07800F07800F0700070F00078F00078F00078
F00078F00078F000787800F07800F07C01F03E03E01F07C00FFF8007FF0001FC0015167F
9518>111 D<F1F000F7FC00FFFE00FC3F00F80F00F00780F00780F007C0F003C0F003C0
F003C0F003C0F003C0F003C0F007C0F00780F00F80F80F00FC3E00FFFE00F7F800F1F000
F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000012207C9519>
I<F0E0F3E0F7E0FF00FE00FC00F800F800F000F000F000F000F000F000F000F000F000F0
00F000F000F000F0000B167C9511>114 D<F001E0F001E07803C07803C07C03C03C0780
3C07801E07801E07001E0F000F0F000F0E00070E00079E00039C00039C00039C00019800
01D80000F80000F00000F00000F00000E00000E00001E00001C00001C0000380007F8000
7F00007E000013207F9516>121 D E /Fb 17 120 df<001E0000003F0000003F000000
3F0000007380000073800000738000007380000073800000F3C00000F3C00000F3C00000
E1C00001E1E00001E1E00001E1E00001E1E00001E1E00003C0F00003C0F00003C0F00003
C0F00007C0F80007FFF80007FFF80007FFF80007FFF8000F003C000F003C000F003C000F
003C000F003C001E001E00FFC0FFC0FFE1FFC0FFE1FFC0FFC0FFC01A257EA41F>65
D<7FFF8000FFFFE000FFFFF8007FFFFC000F00FE000F003E000F001F000F000F800F000F
800F0007800F0007C00F0003C00F0003C00F0003E00F0001E00F0001E00F0001E00F0001
E00F0001E00F0001E00F0001E00F0001E00F0001E00F0003E00F0003C00F0003C00F0003
C00F0007C00F000F800F000F800F001F000F003E000F00FE007FFFFC00FFFFF800FFFFF0
007FFF80001B257FA41F>68 D<7FE07FE0FFF0FFF0FFF0FFF07FE07FE00F000F000F000F
000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
000F000F000FFFFF000FFFFF000FFFFF000FFFFF000F000F000F000F000F000F000F000F
000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
007FE07FE0FFF0FFF0FFF0FFF07FE07FE01C257FA41F>72 D<FE0007F0FF000FF0FF000F
F0FF801FF01D801B801D801B801DC03B801DC03B801CC033801CE073801CE073801CE073
801C6063801C70E3801C70E3801C30C3801C39C3801C39C3801C39C3801C1983801C1983
801C1F83801C0F03801C0F03801C0603801C0003801C0003801C0003801C0003801C0003
801C0003801C0003801C000380FF801FF0FF801FF0FF801FF0FF801FF01C257FA41F>77
D<01FC1C07FF9C0FFFFC3FFFFC3E03FC7C00FC78007CF0003CF0003CF0003CF0003CF000
007800007C00003E00003FE0001FFE0007FFC001FFF0001FF80001FC00007C00001E0000
1E00000F00000F70000FF0000FF0000FF0001FF8001EFC003EFF00FCFFFFF8FFFFF0E3FF
E0E0FF8018257DA41F>83 D<07FC00001FFF00003FFFC0003FFFE0003E03F0001C01F000
0000F800000078000000780000007800007FF80003FFF8000FFFF8003FE078007E007800
78007800F0007800F0007800F0007800F00078007800F8007E03F8003FFFFFE03FFFFFE0
0FFE3FE003F00FE01B1A7D991F>97 D<0007FC000007FC000007FC000007FC0000003C00
00003C0000003C0000003C0000003C0000003C0000003C0000FC3C0003FF3C0007FFBC00
0FFFFC001F81FC003E00FC003C007C007C003C0078003C00F8003C00F0003C00F0003C00
F0003C00F0003C00F0003C00F0003C00F8003C0078007C0078007C003C00FC003E01FC00
1F83FC001FFFFFE007FFBFE003FE3FE000F83FE01B257EA41F>100
D<007F0001FFC007FFE00FFFF01F81F83F00783C003C7C003C78001E78001EFFFFFEFFFF
FEFFFFFEFFFFFEF00000F000007800007800007C001E3E001E1F803E1FE07C0FFFF803FF
F001FFE0003F80171A7D991F>I<0001F80007FC000FFE001FFE003E3E007C1C00780000
78000078000078000078007FFFFCFFFFFCFFFFFCFFFFFC00780000780000780000780000
780000780000780000780000780000780000780000780000780000780000780000780000
78000078007FFFF87FFFF87FFFF87FFFF817257EA41F>I<FF000000FF000000FF000000
FF00000007000000070000000700000007000000070000000700000007000000070FFF80
070FFF80070FFF80070FFF800700F0000701E0000703C00007078000070F0000071E0000
073C0000077E0000077F000007E7800007E3800007C1C0000781E0000700E00007007000
070078000700380007001C00FFF8FFE0FFF8FFE0FFF8FFE0FFF8FFE01B257EA41F>107
D<FFFC00FFFC00FFFC00FFFC00003C00003C00003C00003C00003C00003C00003C00003C
00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C
00003C00003C00003C00003C00003C00003C00003C00003C00003C00FFFFFFFFFFFFFFFF
FFFFFFFF18257DA41F>I<FF87E000FF9FF000FFBFF800FFFFFC0007F83C0007E01E0007
C01E0007C01E0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007
801E0007801E0007801E0007801E0007801E0007801E0007801E00FFFC7FF0FFFC7FF0FF
FC7FF0FFFC7FF01C1A7F991F>110 D<FF83E000FF9FF800FFBFFE00FFFFFF0007F83F00
07E00F8007C0078007C003C0078003C0078003E0078001E0078001E0078001E0078001E0
078001E0078001E0078003E0078003C007C007C007C0078007E00F8007F83F0007FFFE00
07BFFC00079FF8000787E000078000000780000007800000078000000780000007800000
078000000780000007800000FFFC0000FFFC0000FFFC0000FFFC00001B277F991F>112
D<FFE07E00FFE1FF80FFE7FFC0FFEFFFC001FF87C001FE038001FC000001F8000001F000
0001F0000001F0000001E0000001E0000001E0000001E0000001E0000001E0000001E000
0001E0000001E0000001E0000001E00000FFFFF000FFFFF000FFFFF000FFFFF0001A1A7E
991F>114 D<0070000000F0000000F0000000F0000000F0000000F0000000F000007FFF
FE00FFFFFE00FFFFFE00FFFFFE0000F0000000F0000000F0000000F0000000F0000000F0
000000F0000000F0000000F0000000F0000000F0000000F0000000F0078000F0078000F0
078000F0078000F80F00007C1F00007FFE00003FFC00001FF8000007E00019217FA01F>
116 D<FF83FE00FF83FE00FF83FE00FF83FE0007801E0007801E0007801E0007801E0007
801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007
801E0007801E0007803E0007803E0007C0FE0003FFFFF003FFFFF001FF9FF0007E1FF01C
1A7F991F>I<FFE07FF0FFE07FF0FFE07FF0FFE07FF01C0003801C0003801C0003801E00
03800E0007000E0007000E0F87000E1FC7000E1FC7000E3FC700063DE600073DE600073D
EE000739EE000778EE000778EE000778EE000370EC0003F07C0003F07C0003F07C0001E0
38001C1A7F991F>119 D E /Fc 36 124 df<078000180018600038003830007800703C
01F0007013FEE000F01801C000F01803C000F018078000F018070000F0180E0000F0181E
0000F0183C0000701038000070307000003820F000001841E000000781C0780000038184
0000078382000007070300000E070100001E0F0180003C0F018000380F018000700F0180
00F00F018001E00F018001C00F01800380070100078007030007000382000E0001840006
0000780021217D9E28>37 D<FFE0FFE0FFE0FFE00B047F8A10>45
D<78FCFCFCFC7806067D850D>I<03F8000F1E001C07003C07803803807803C07803C078
03C0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F8
03E07803C07803C03803803C07801C07000F1E0003F800131B7E9A18>48
D<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E0
0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
0003E0007FFF807FFF80111B7D9A18>I<07F8001FFE00383F80780FC0FC07C0FC07E0FC
03E0FC03E07803E00007E00007C00007C0000F80001F00001E0000380000700000E00001
80600300600600600800E01FFFC03FFFC07FFFC0FFFFC0FFFFC0131B7E9A18>I<03F800
1FFE003C1F003C0F807C07C07E07C07C07C03807C0000F80000F80001E00003C0003F800
001E00000F800007C00007C00007E03007E07807E0FC07E0FC07E0FC07C0780F80781F00
1FFE0007F800131B7E9A18>I<000180000380000780000F80001F80003F80006F8000CF
80008F80018F80030F80060F800C0F80180F80300F80600F80C00F80FFFFF8FFFFF8000F
80000F80000F80000F80000F80000F8001FFF801FFF8151B7F9A18>I<007E0003FF0007
81800F03C01E07C03C07C03C0380780000780000F80000F8F800FB0E00FA0780FC0380FC
03C0F803E0F803E0F803E0F803E07803E07803E07803C03C03C03C07801E0F0007FE0003
F800131B7E9A18>54 D<6000007FFFE07FFFE07FFFC07FFF807FFF80E00300C00600C00C
00C0180000300000300000600000E00000E00001E00001C00003C00003C00003C00003C0
0007C00007C00007C00007C00007C00007C000038000131C7D9B18>I<03F8000FFE001E
0F803807803803C07803C07803C07E03C07F83807FC7003FFE001FFC000FFE0007FF801D
FF80387FC0781FE0F007E0F003E0F001E0F001E0F001E07801C07803803E07801FFE0003
F800131B7E9A18>I<03F8000FFE001E0F003C07807807807803C0F803C0F803C0F803E0
F803E0F803E0F803E07807E03807E03C0BE00E1BE003E3E00003E00003C00003C03807C0
7C07807C0700780F00383C001FF8000FE000131B7E9A18>I<FFFFF800FFFFFF000FC01F
800FC00FC00FC007C00FC007E00FC007E00FC007E00FC007E00FC007E00FC007C00FC00F
800FC03F000FFFFE000FC00F800FC007C00FC007E00FC003E00FC003F00FC003F00FC003
F00FC003F00FC003F00FC007E00FC007E00FC01FC0FFFFFF00FFFFFC001C1C7E9B22>66
D<001FE02000FFF8E003F80FE007C003E00F8001E01F0000E03E0000E03E0000607E0000
607C000060FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0000
007C0000607E0000603E0000603E0000C01F0000C00F80018007C0030003F80E0000FFFC
00001FE0001B1C7D9B22>I<FFFC3FFFFFFC3FFF0FC003F00FC003F00FC003F00FC003F0
0FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FFFFFF00FFFFFF00FC003F0
0FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F0
0FC003F00FC003F0FFFC3FFFFFFC3FFF201C7E9B25>72 D<FFFFFFFF07E007E007E007E0
07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E0
07E007E0FFFFFFFF101C7F9B12>I<FFC00003FFFFE00007FF0FE00007F00DF0000DF00D
F0000DF00DF0000DF00CF80019F00CF80019F00C7C0031F00C7C0031F00C3E0061F00C3E
0061F00C1F00C1F00C1F00C1F00C1F00C1F00C0F8181F00C0F8181F00C07C301F00C07C3
01F00C03E601F00C03E601F00C01FC01F00C01FC01F00C01FC01F00C00F801F00C00F801
F0FFC0701FFFFFC0701FFF281C7E9B2D>77 D<07F8201FFEE03C07E07801E07000E0F000
E0F00060F00060F80000FE0000FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003
F00001F00000F0C000F0C000F0C000E0E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B
>83 D<7FFFFFE07FFFFFE0781F81E0701F80E0601F8060E01F8070C01F8030C01F8030C0
1F8030C01F8030001F8000001F8000001F8000001F8000001F8000001F8000001F800000
1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800007
FFFE0007FFFE001C1C7E9B21>I<FFFC03FFFFFC03FF0FC000300FC000300FC000300FC0
00300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC0
00300FC000300FC000300FC000300FC000300FC000300FC0003007C0003007C0006003E0
00E001F001C000FC0780007FFE00000FF800201C7E9B25>I<0FF8001C1E003E0F803E07
803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780B
C03E13F80FE1F815127F9117>97 D<03FC000E0E001C1F003C1F00781F00780E00F80000
F80000F80000F80000F80000F800007800007801803C01801C03000E0E0003F80011127E
9115>99 D<01FC000F07001C03803C01C07801C07801E0F801E0F801E0FFFFE0F80000F8
0000F800007800007C00603C00601E00C00F038001FC0013127F9116>101
D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0F
C01F31E01F40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
F81F00F81F00F81F00F8FFE7FFFFE7FF181D7F9C1B>104 D<1E003F003F003F003F001E
00000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F
001F001F001F001F00FFE0FFE00B1E7F9D0E>I<FF00FF001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F00FFE0FFE00B1D7F9C0E>108 D<FF0FC07E00FF31E18F001F40F207801F80FC07C01F
80FC07C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00
F807C01F00F807C01F00F807C01F00F807C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F
9128>I<FF0FC0FF31E01F40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00
F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF18127F911B>I<01FC000F07801C
01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F800F8F800F87800F07800F03C
01E01E03C00F078001FC0015127F9118>I<FF3F80FFE1E01F80F01F00781F007C1F003C
1F003E1F003E1F003E1F003E1F003E1F003E1F003C1F007C1F00781F80F01FC1E01F3F00
1F00001F00001F00001F00001F00001F0000FFE000FFE000171A7F911B>I<FE3E00FE47
001E8F801E8F801E8F801F07001F00001F00001F00001F00001F00001F00001F00001F00
001F00001F0000FFF000FFF00011127F9114>114 D<1FD830786018E018E018F000FF80
7FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113>I<03000300030003
00070007000F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F
0C1F0C0F08079803F00E1A7F9913>I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C1
8007C18003E30003E30001F60001F60001FE0000FC0000FC000078000078000030001612
7F9119>118 D<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003E3
0001F70001F60000FE0000FC0000FC00007800007800003000003000007000706000F860
00F8C000F980007300003E0000161A7F9119>121 D<FFFFFE1701808B18>123
D E /Fd 44 122 df<000FF000007FFC0001F80E0003E01F0007C03F000F803F000F803F
000F801E000F800C000F8000000F8000000F8000000F800000FFFFFF00FFFFFF000F801F
000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F
000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F007FF0FF
E07FF0FFE01B237FA21F>12 D<387CFEFEFE7C3807077C8610>46
D<00FE0007FFC00F83E01F01F03E00F83E00F87C007C7C007C7C007CFC007CFC007EFC00
7EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C00
7C7C007C7C007C3E00F83E00F81F01F00F83E007FFC000FE0017207E9F1C>48
D<00180000780001F800FFF800FFF80001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F80001F80001F8007FFFE07FFFE013207C9F1C>I<03FC000F
FF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003F80003F000
03F00007E00007C0000F80001F00003E0000380000700000E01801C0180380180700180E
00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007FFC00F07E0
1E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE00
01FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC
7E01FC7801F81E07F00FFFC001FE0017207E9F1C>I<0000E00001E00003E00003E00007
E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E00307E00707E00E07E00C07
E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E00007E00007
E00007E000FFFE00FFFE17207E9F1C>I<001F8000FFE003F07007C0F00F01F81F01F83E
01F83E01F87E00F07C00007C0000FC0800FC7FC0FCFFE0FD80F0FF00F8FE007CFE007CFC
007EFC007EFC007EFC007E7C007E7C007E7C007E3C007C3E007C1E00F80F00F00783E003
FFC000FF0017207E9F1C>54 D<6000007800007FFFFE7FFFFE7FFFFC7FFFF87FFFF87FFF
F0E00060E000C0C00180C00300C00300000600000C00001C000018000038000078000078
0000F00000F00000F00001F00001F00001F00003F00003F00003F00003F00003F00003F0
0003F00001E00017227DA11C>I<00FE0003FFC00703E00E00F01C00F01C00783C00783E
00783F00783F80783FE0F01FF9E01FFFC00FFF8007FFC003FFE007FFF01E7FF83C1FFC78
07FC7801FEF000FEF0003EF0001EF0001EF0001CF8001C7800383C00381F01F00FFFC001
FF0017207E9F1C>I<000070000000007000000000F800000000F800000000F800000001
FC00000001FC00000003FE00000003FE00000003FE00000006FF000000067F0000000E7F
8000000C3F8000000C3F800000183FC00000181FC00000381FE00000300FE00000300FE0
0000600FF000006007F00000E007F80000FFFFF80000FFFFF800018001FC00018001FC00
038001FE00030000FE00030000FE000600007F000600007F00FFE00FFFF8FFE00FFFF825
227EA12A>65 D<0003FE0080001FFF818000FF01E38001F8003F8003E0001F8007C0000F
800F800007801F800007803F000003803F000003807F000001807E000001807E00000180
FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
000000007E000000007E000001807F000001803F000001803F000003801F800003000F80
00030007C000060003F0000C0001F800380000FF00F000001FFFC0000003FE000021227D
A128>67 D<FFFFFFF8FFFFFFF807F001F807F0007807F0003807F0001807F0001C07F000
1C07F0000C07F0000C07F0180C07F0180C07F0180007F0180007F0380007F0780007FFF8
0007FFF80007F0780007F0380007F0180007F0180007F0180007F0180007F0000007F000
0007F0000007F0000007F0000007F0000007F0000007F00000FFFFE000FFFFE0001E227E
A123>70 D<0003FE0040001FFFC0C0007F00F1C001F8003FC003F0000FC007C00007C00F
C00003C01F800003C03F000001C03F000001C07F000000C07E000000C07E000000C0FE00
000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000F
FFFC7E000FFFFC7F00001FC07F00001FC03F00001FC03F00001FC01F80001FC00FC0001F
C007E0001FC003F0001FC001FC003FC0007F80E7C0001FFFC3C00003FF00C026227DA12C
>I<FFFF83FFFEFFFF83FFFE07F0001FC007F0001FC007F0001FC007F0001FC007F0001F
C007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC0
07F0001FC007FFFFFFC007FFFFFFC007F0001FC007F0001FC007F0001FC007F0001FC007
F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0
001FC007F0001FC007F0001FC007F0001FC0FFFF83FFFEFFFF83FFFE27227EA12C>I<FF
FFE0FFFFE003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003
F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003
F80003F80003F80003F80003F80003F80003F80003F800FFFFE0FFFFE013227FA115>I<
FFF000000FFFFFF800001FFF07F800001FE006FC000037E006FC000037E006FC000037E0
067E000067E0067E000067E0063F0000C7E0063F0000C7E0061F800187E0061F800187E0
060FC00307E0060FC00307E0060FC00307E00607E00607E00607E00607E00603F00C07E0
0603F00C07E00601F81807E00601F81807E00601F81807E00600FC3007E00600FC3007E0
06007E6007E006007E6007E006003FC007E006003FC007E006001F8007E006001F8007E0
06001F8007E006000F0007E0FFF00F00FFFFFFF00600FFFF30227EA135>77
D<0007FC0000003FFF800000FC07E00003F001F80007E000FC000FC0007E001F80003F00
1F80003F003F00001F803F00001F807F00001FC07E00000FC07E00000FC0FE00000FE0FE
00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00
000FE07E00000FC07F00001FC07F00001FC03F00001F803F80003F801F80003F000FC000
7E0007E000FC0003F001F80000FC07E000003FFF80000007FC000023227DA12A>79
D<FFFFFF00FFFFFFE007F007F007F001FC07F000FC07F0007E07F0007E07F0007F07F000
7F07F0007F07F0007F07F0007F07F0007E07F0007E07F000FC07F001FC07F007F007FFFF
E007FFFF0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000
0007F0000007F0000007F0000007F0000007F00000FFFF8000FFFF800020227EA126>I<
01FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000
FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003F
C0001FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF8018227DA11F>
83 D<7FFFFFFF807FFFFFFF807E03F80F807803F807807003F803806003F80180E003F8
01C0E003F801C0C003F800C0C003F800C0C003F800C0C003F800C00003F800000003F800
000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000
03F800000003F800000003F800000003F8000003FFFFF80003FFFFF80022227EA127>I<
FFFF803FFCFFFF803FFC07F000018007F000018007F000018007F000018007F000018007
F000018007F000018007F000018007F000018007F000018007F000018007F000018007F0
00018007F000018007F000018007F000018007F000018007F000018007F000018007F000
018007F000018007F000018007F000018007F000018003F000030003F800030001F80006
0000FC000E00007E001C00003F80F800000FFFE0000001FF000026227EA12B>I<07FC00
1FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F0
7E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F18167E951B>97
D<FF000000FF0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000
001F0000001F0000001F0000001F0000001F0FE0001F3FF8001FF07C001F801E001F001F
001F000F801F000F801F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000F
C01F000FC01F000F801F001F801F801F001FC03E001EE07C001C3FF800180FC0001A237E
A21F>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC00
00FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE001416
7E9519>I<0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000003E
0000003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E
003E003E007E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E
00FC003E00FC003E007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3F
C01A237EA21F>I<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FF
FFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00300FC07003FFC000
FF0015167E951A>I<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F8000
0F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F8000
0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000
7FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03
E07C03E07C03E03C03C03E07C01F0F801FFF0013FC003000003000003800003FFF801FFF
F00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFF
E001FF0018217E951C>I<FF000000FF0000001F0000001F0000001F0000001F0000001F
0000001F0000001F0000001F0000001F0000001F0000001F0000001F07E0001F1FF8001F
307C001F403C001F803E001F803E001F003E001F003E001F003E001F003E001F003E001F
003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00FF
E1FFC0FFE1FFC01A237EA21F>I<1C003F007F007F007F003F001C000000000000000000
000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F00FFE0FFE00B247EA310>I<0038007C00FE00FE00FE007C003800
0000000000000000000000000003FE03FE003E003E003E003E003E003E003E003E003E00
3E003E003E003E003E003E003E003E003E003E003E003E003E003E783EFC3EFC3CFC7C78
F87FE01F800F2E83A311>I<FF00FF001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F00FFE0FFE00B237EA210>108 D<FF07F007F000FF1FFC1FFC001F303E303E
001F403E403E001F801F801F001F801F801F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0FF
E0FFE0FFE0FFE02B167E9530>I<FF07E000FF1FF8001F307C001F403C001F803E001F80
3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F00
3E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC01A167E951F>
I<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC00
7EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE0017167E951C
>I<FF0FE000FF3FF8001FF07C001F803E001F001F001F001F801F001F801F000FC01F00
0FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F001F801F001F801F80
3F001FC03E001FE0FC001F3FF8001F0FC0001F0000001F0000001F0000001F0000001F00
00001F0000001F0000001F000000FFE00000FFE000001A207E951F>I<FE1F00FE3FC01E
67E01EC7E01E87E01E87E01F83C01F00001F00001F00001F00001F00001F00001F00001F
00001F00001F00001F00001F00001F0000FFF000FFF00013167E9517>114
D<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007FF8003FFE000FFF
0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F00011167E9516
>I<0180000180000180000180000380000380000780000780000F80003F8000FFFF00FF
FF000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
81800F81800F81800F81800F81800F830007C30003FE0000F80011207F9F16>I<FF01FE
00FF01FE001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E
001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F007E001F00FE
000F81BE0007FF3FC001FC3FC01A167E951F>I<FFE01FE0FFE01FE00F8006000F800600
0FC00E0007C00C0007E01C0003E0180003E0180001F0300001F0300000F8600000F86000
007CC000007CC000007FC000003F8000003F8000001F0000001F0000000E0000000E0000
1B167F951E>I<FFE7FF07F8FFE7FF07F81F007800C00F807801800F807C01800F807C01
8007C07E030007C0DE030007E0DE070003E0DF060003E18F060001F18F0C0001F38F8C00
01FB079C0000FB07D80000FE03D800007E03F000007E03F000007C01F000003C01E00000
3800E000001800C00025167F9528>I<FFE01FE0FFE01FE00F8006000F8006000FC00E00
07C00C0007E01C0003E0180003E0180001F0300001F0300000F8600000F86000007CC000
007CC000007FC000003F8000003F8000001F0000001F0000000E0000000E0000000C0000
000C00000018000078180000FC380000FC300000FC60000069C000007F8000001F000000
1B207F951E>121 D E /Fe 4 102 df<00000C0000000C0000001C0000001C0000003C00
00007C0000005C0000009C0000008E0000010E0000010E0000020E0000040E0000040E00
00080E0000080E0000100E0000200E00003FFE0000400700004007000080070001000700
010007000200070002000700060007001E000700FF807FF01C1D7F9C1F>65
D<01FFFF00003C01C0003800E0003800F0003800700038007000700070007000F0007000
F0007001E000E003C000E0078000E01F0000FFFC0001C00F0001C0078001C003C001C003
C0038003C0038003C0038003C0038003C0070007800700070007000E0007001C000E0078
00FFFFC0001C1C7E9B1F>I<01FFC3FF80003C0078000038007000003800700000380070
000038007000007000E000007000E000007000E000007000E00000E001C00000E001C000
00E001C00000FFFFC00001C003800001C003800001C003800001C0038000038007000003
800700000380070000038007000007000E000007000E000007000E000007000E00000F00
1E0000FFE1FFC000211C7E9B23>72 D<01F007080C0818043808300870307FC0E000E000
E000E000E000E0046008601030600F800E127E9113>101 D E /Ff
3 104 df<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003
C010107E9115>15 D<003C00E001C0018003800380038003800380038003800380038003
80038003800380030007001C00F0001C0007000300038003800380038003800380038003
8003800380038003800380018001C000E0003C0E297D9E15>102
D<F0001C0007000300038003800380038003800380038003800380038003800380038001
8001C000E0003C00E001C001800380038003800380038003800380038003800380038003
800380030007001C00F0000E297D9E15>I E /Fg 77 123 df<60F0F0F0F0F0F0F0F0F0
F0F0F0F0F0F0600000000060F0F0600419779816>33 D<E038F078F078F078F078F078F0
78F078E038E03860300D0B7C9816>I<0387000387000387000387000387000387007FFF
C0FFFFE0FFFFE0070E00070E00070E000E1C000E1C000E1C000E1C00FFFFE0FFFFE07FFF
C01C38001C38001C38001C38001C38001C380013197F9816>I<00C00001C00001C00001
C00007F0001FFC003FFE007DCF0071C780E1C380E1C780E1C780F1C30079C0003FC0001F
F00007FC0001FE0001CF0001C70061C380F1C380F1C380E1C38071C70079DF003FFE001F
F80007E00001C00001C00000C00011207E9C16>I<03800007E0000FE0001E70001C7000
1C70001C70001C77E01CE7E01DE7E00FC7000F8E000F0E001E0E003F1C007F1C00739C00
E3F800E1F800E0F1C0E0F1C071F9C07FFFC03F9F801E070013197F9816>38
D<00E001E0038007000E001C001C0038003800700070007000E000E000E000E000E000E0
00E000E000E000700070007000380038001C001C000E000700038001E000E00B217A9C16
>40 D<C000E000700038001C000E000E000700070003800380038001C001C001C001C001
C001C001C001C001C0038003800380070007000E000E001C0038007000E000C0000B217B
9C16>I<01C00001C00001C00001C00071C700F9CF807FFF001FFC0007F00007F0001FFC
007FFF00F9CF8071C70001C00001C00001C00001C00011127E9516>I<01C00001C00001
C00001C00001C00001C00001C00001C000FFFF80FFFF80FFFF8001C00001C00001C00001
C00001C00001C00001C00001C00011137E9516>I<387C7E7E3E0E1E1C78F060070B7984
16>I<FFFF80FFFF80FFFF8011037E8D16>I<70F8F8F8700505788416>I<000180000380
000380000700000700000E00000E00001C00001C0000380000380000700000700000E000
00E00001C00001C0000380000380000700000700000E00000E00001C00001C0000380000
380000700000700000E00000E00000C0000011207E9C16>I<03E0000FF8001FFC001E3C
00380E00780F00700700700700E00380E00380E00380E00380E00380E00380E00380E003
80F00780700700700700780F003C1E001E3C001FFC000FF80003E00011197E9816>I<01
800380038007800F807F80FF807380038003800380038003800380038003800380038003
800380038003807FF87FFC7FF80E197C9816>I<07E0001FF8003FFC00783E00E00700F0
0780F00380600380000380000380000700000700000E00001C0000380000700000E00001
C0000380000F00001E03803803807FFF80FFFF807FFF8011197E9816>I<07E0001FF800
3FFC00781E00780700300700000700000700000E00003E0007FC0007F00007FC00001E00
000700000300000380000380600380F00380E00700781E003FFC001FF80007E00011197E
9816>I<007C0000FC0000DC0001DC00039C00039C00071C000F1C000E1C001E1C003C1C
00381C00781C00F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C00001C00001C0001FF
C001FFC001FFC013197F9816>I<3FFE003FFE003FFE0038000038000038000038000038
00003800003800003BF0003FFC003FFE003C0F00300700000380000380600380F00380F0
0380E00700781E003FFC001FF80007E00011197E9816>I<00F80003FC0007FE000F0700
1C0F00380F00780600700000700000E3F800EFFC00FFFE00F80F00F00700F00380E00380
E003807003807003807007803807003C1E001FFC000FF80003E00011197E9816>I<07F0
001FFC003FFE007C1F00F00780E00380E00380E003807007007C1F001FFC0007F0001FFC
003C1E00700700F00780E00380E00380E00380F007807007007C1F003FFE001FFC0007F0
0011197E9816>56 D<70F8F8F870000000000000000070F8F8F8700512789116>58
D<387C7C7C38000000000000000038787C7C3C1C1C3870E0400618799116>I<00018000
0780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000FC00003E00000F
800007C00001F00000F800003E00001F8000078000018011157E9616>I<7FFF00FFFF80
FFFF80000000000000000000000000000000FFFF80FFFF807FFF00110B7E9116>I<C000
00F00000FC00003E00000F800007C00001F00000F800003E00001F80000780001F80003E
0000F80001F00007C0000F80003E0000FC0000F00000C0000011157E9616>I<00F80003
FC0007FE000F07001C3F80387F8078FF8071C3C071C3C0E381C0E381C0E381C0E381C0E3
81C0E381C0E381C071C38071C38078FF00387E001C3C000F03C007FFC003FF0000FC0012
197E9816>64 D<00E00001F00001F00001B00001B00003B80003B80003B800031800071C
00071C00071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07
007F1FC0FF1FE07F1FC013197F9816>I<7FF800FFFE007FFF001C0F001C07801C03801C
03801C03801C07801C07001FFF001FFE001FFE001C1F001C03801C03C01C01C01C01C01C
01C01C01C01C03C01C07807FFF80FFFF007FFC0012197F9816>I<01F18007FB800FFF80
1F0F803C0780380380700380700380F00000E00000E00000E00000E00000E00000E00000
E00000F000007003807003803803803C07001F0F000FFE0007FC0001F00011197E9816>
I<7FF800FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C00
E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE
007FF8001319809816>I<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C
00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C
00E01C00E07FFFE0FFFFE07FFFE013197F9816>I<FFFFE0FFFFE0FFFFE01C00E01C00E0
1C00E01C00E01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C0000
1C00001C00001C00001C00001C0000FF8000FFC000FF800013197F9816>I<03E30007FF
000FFF001E1F003C0F00380700700700700700F00000E00000E00000E00000E00000E03F
80E07FC0E03F80F00700700700700700380F003C0F001E1F000FFF0007F70003E7001219
7E9816>I<7F1FC0FFBFE07F1FC01C07001C07001C07001C07001C07001C07001C07001F
FF001FFF001FFF001C07001C07001C07001C07001C07001C07001C07001C07001C07007F
1FC0FFBFE07F1FC013197F9816>I<FFFEFFFEFFFE038003800380038003800380038003
8003800380038003800380038003800380038003800380FFFEFFFEFFFE0F197D9816>I<
FFC000FFC000FFC0001C00001C00001C00001C00001C00001C00001C00001C00001C0000
1C00001C00001C00001C00001C00001C00401C00E01C00E01C00E01C00E0FFFFE0FFFFE0
FFFFE013197F9816>76 D<FC07E0FE0FE0FE0FE03A0B803B1B803B1B803B1B803B1B803B
1B803BBB8039B38039B38039B38039B38039F38038E38038E38038038038038038038038
0380380380FE0FE0FE0FE0FE0FE013197F9816>I<7E1FC0FF3FE07F1FC01D07001D8700
1D87001D87001DC7001DC7001CC7001CC7001CE7001CE7001CE7001C67001C67001C7700
1C77001C37001C37001C37001C17007F1F00FF9F007F0F0013197F9816>I<1FFC003FFE
007FFF00780F00F00780E00380E00380E00380E00380E00380E00380E00380E00380E003
80E00380E00380E00380E00380E00380F00780F00780780F007FFF003FFE001FFC001119
7E9816>I<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C
03801C0F801FFF001FFE001FF8001C00001C00001C00001C00001C00001C00001C00007F
0000FF80007F000012197F9816>I<7FE000FFF8007FFC001C1E001C0F001C07001C0700
1C07001C07001C0F001C1E001FFC001FF8001FFC001C1C001C0E001C0E001C0E001C0E00
1C0E201C0E701C0E707F07E0FF87E07F03C014197F9816>82 D<07E3001FFF003FFF0078
1F00F00700E00700E00700E00000F000007800003F80001FF00007FC0000FE00000F0000
0700000380000380600380E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I<
7FFFE0FFFFE0FFFFE0E0E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000E000
00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00007FC000FFE00
07FC0013197F9816>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01
C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C00E03800E03
8007070007FF0003FE0000F8001519809816>I<FE0FE0FF1FE0FE0FE03803801C07001C
07001C07001C07000E0E000E0E000E0E000E0E00060C00071C00071C00071C00071C0003
180003B80003B80003B80001B00001F00001F00000E00013197F9816>I<FC07E0FE0FE0
FC07E07001C07001C07001C030018038038038038038038038E38039F38039F38039B380
19B30019B30019B30019B30019B30019B3001913001B1B000F1E000F1E000E0E0013197F
9816>I<FE0FE0FF1FE0FE0FE01C07001C07000E0E000E0E00071C00071C00071C0003B8
0003B80001F00001F00000E00000E00000E00000E00000E00000E00000E00000E00003F8
0007FC0003F80013197F9816>89 D<7FFF80FFFF80FFFF80E00700E00F00E01E00E01C00
003C0000780000700000F00001E00001C00003C0000780000700000F00001E03801C0380
3C0380780380700380FFFF80FFFF80FFFF8011197E9816>I<FFF0FFF0FFF0E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000FFF0FFF0FFF00C20789C16>I<FFF0FFF0FFF0007000700070
007000700070007000700070007000700070007000700070007000700070007000700070
00700070007000700070FFF0FFF0FFF00C207F9C16>93 D<FFFF80FFFF80FFFF8011037E
7E16>95 D<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E0070
0E00E00E00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97
D<7E0000FE00007E00000E00000E00000E00000E00000E3E000EFF000FFF800F83C00F00
E00E00E00E00700E00700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF
00063C001419809816>I<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F00070
0778073E0E1FFC0FF803F010127D9116>I<003F00007F00003F00000700000700000700
00070003C7000FF7001FFF003C1F00780F00700700E00700E00700E00700E00700E00700
E00700700F00700F003C1F001FFFE00FE7F007C7E014197F9816>I<03E00FF81FFC3C1E
780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F010127D9116>I<00
1F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FFFF0001C00001C00001
C00001C00001C00001C00001C00001C00001C00001C00001C00001C0003FFE007FFF003F
FE0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E00380E00380E00380E00
1C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF807803C0E000E0E000E0
E000E0E000E07001C07C07C03FFF800FFE0003F800131C7F9116>I<7E0000FE00007E00
000E00000E00000E00000E00000E3C000EFE000FFF000F87800F03800E03800E03800E03
800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F01519809816
>I<018003C003C0018000000000000000007FC07FC07FC001C001C001C001C001C001C0
01C001C001C001C001C001C07FFFFFFF7FFF101A7D9916>I<0030007800780030000000
00000000001FF81FF81FF800380038003800380038003800380038003800380038003800
380038003800380038003800386070F0F0FFE07FC03F800D237E9916>I<7E0000FE0000
7E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E1E000E3C000E7800
0EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FFCFF07F87F0141980
9816>I<FFC000FFC000FFC00001C00001C00001C00001C00001C00001C00001C00001C0
0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF
80FFFF80FFFF8011197E9816>I<F9C380FFEFC0FFFFE03C78E03C78E03870E03870E038
70E03870E03870E03870E03870E03870E03870E03870E0FE7CF8FE7CF8FE3C7815128091
16>I<7E3C00FEFE007FFF000F87800F03800E03800E03800E03800E03800E03800E0380
0E03800E03800E03800E03807FC7F0FFE7F87FC7F01512809116>I<03E0000FF8001FFC
003C1E00780F00700700E00380E00380E00380E00380E00380F00780700700780F003C1E
001FFC000FF80003E00011127E9116>I<7E3E00FEFF007FFF800F83C00F00E00E00E00E
00700E00700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF000E3C000E
00000E00000E00000E00000E00000E00007FC000FFE0007FC000141B809116>I<FF0FC0
FF3FE0FF7FE007F04007C000078000078000070000070000070000070000070000070000
070000070000FFFC00FFFC00FFFC0013127F9116>114 D<0FEC3FFC7FFCF03CE01CE01C
70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7E00F127D9116>I<0300000700
000700000700000700007FFF00FFFF00FFFF000700000700000700000700000700000700
0007000007010007038007038007038007870003FE0001FC0000F80011177F9616>I<7E
1F80FE3F807E1F800E03800E03800E03800E03800E03800E03800E03800E03800E03800E
03800E03800E0F800FFFF007FBF803E3F01512809116>I<7F1FC0FF1FE07F1FC01C0700
1E0F000E0E000E0E000E0E00071C00071C00071C00071C0003B80003B80003B80001F000
01F00000E00013127F9116>I<FF1FE0FFBFE0FF1FE038038038038038038038038038E3
8019F30019F30019B3001DB7001DB7001DB7001DB7000F1E000F1E000F1E0013127F9116
>I<7F1FC07F3FC07F1FC00F1C00073C0003B80003F00001F00000E00001E00001F00003
B800073C00071C000E0E007F1FC0FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC0
1C07000E07000E0E000E0E00070E00071C00071C00039C00039C0003980001B80001B800
00F00000F00000F00000E00000E00000E00001C00079C0007BC0007F80003F00003C0000
131B7F9116>I<3FFFC07FFFC07FFFC0700780700F00701E00003C0000780001F00003E0
000780000F00001E01C03C01C07801C0FFFFC0FFFFC0FFFFC012127F9116>I
E /Fh 27 122 df<60F0F070101020204040040A7D830A>44 D<60F0F06004047D830A>
46 D<001000003800003800003800005C00005C00005C00008E00008E00008E00010700
01070003078002038002038007FFC00401C00401C00800E00800E01800E03800F0FE03FE
17177F961A>65 D<FFFE001C03801C00E01C00601C00701C00701C00701C00701C00E01C
01C01FFF801FFFC01C00E01C00701C00301C00381C00381C00381C00381C00701C00E01C
01C0FFFF0015177F9619>I<FFFFE01C00E01C00601C00201C00101C00101C00101C0400
1C04001C04001C0C001FFC001C0C001C04001C04081C04081C00081C00181C00101C0010
1C00301C00F0FFFFF015177F9618>69 D<FFE00E000E000E000E000E000E000E000E000E
000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B177F960D>73
D<FFFE001C03801C00C01C00601C00701C00701C00701C00701C00601C00C01C03801FFE
001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000FF80001417
7F9618>80 D<FFFC001C03801C00C01C00E01C00701C00701C00701C00701C00E01C00C0
1C03801FFE001C07801C01C01C00E01C00E01C00E01C00E01C00E01C00E11C00E11C0072
FF803C18177F961A>82 D<0FC4302C601C400CC004C004C004E00070007F003FE00FF801
FC001C000E0006800680068006C004E008D81087E00F177E9614>I<7FFFF86038184038
084038088038048038048038040038000038000038000038000038000038000038000038
0000380000380000380000380000380000380000380007FFC016177F9619>I<1FC03860
38301038003803F81E3830387038E039E039E07970FF1F1E100E7F8D12>97
D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001CF8001F06001C03
001C03801C01801C01C01C01C01C01C01C01C01C01801C03801C03001B0E0010F8001217
809614>I<07F01838303870106000E000E000E000E000600070083008183007C00D0E7F
8D10>I<007E00000E00000E00000E00000E00000E00000E00000E00000E0007CE001C3E
00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E00182E0007CF
C012177F9614>I<0FC0186030307038E018FFF8E000E000E000600070083010183007C0
0D0E7F8D10>I<03E006700E701C201C001C001C001C001C00FF801C001C001C001C001C
001C001C001C001C001C001C001C00FF800C1780960B>I<FC00001C00001C00001C0000
1C00001C00001C00001C00001C00001C7C001D8E001E07001C07001C07001C07001C0700
1C07001C07001C07001C07001C07001C0700FF9FE01317809614>104
D<183C3C1800000000007C1C1C1C1C1C1C1C1C1C1C1C1CFF081780960A>I<0300078007
800300000000000000000000001F80038003800380038003800380038003800380038003
8003800380038003804380E300E7007C00091D82960B>I<FC7C001D8E001E07001C0700
1C07001C07001C07001C07001C07001C07001C07001C07001C0700FF9FE0130E808D14>
110 D<07C018303018600C600CE00EE00EE00EE00EE00E701C3018183007C00F0E7F8D12
>I<FCF8001F0E001C03001C03801C01801C01C01C01C01C01C01C01C01C01801C03801C
07001F0E001CF8001C00001C00001C00001C00001C0000FF80001214808D14>I<FCF01D
381E381C101C001C001C001C001C001C001C001C001C00FF800D0E808D0E>114
D<1F4060C0C040C040E000FF007F801FC001E080608060C060E0C09F000B0E7F8D0E>I<
080008000800180018003800FF8038003800380038003800380038003840384038403840
1C800F000A147F930E>I<FC3F001C07001C07001C07001C07001C07001C07001C07001C
07001C07001C07001C0F000E170003E7E0130E808D14>I<FE1F3C0E3C0C1C081C080E10
0E100720072003C003C003C00180018001000100E200E200A400780010147F8D13>121
D E /Fi 1 4 df<0C000C008C40EDC07F800C007F80EDC08C400C000C000A0B7D8B10>3
D E /Fj 51 123 df<0001FC000703000C03001C07001C03001800003800003800003800
00380000700007FFFC00701C00701C00701C00E03800E03800E03800E03800E07001C070
01C07001C07001C0E201C0E201C0E20380E4038064038038038000030000070000060000
C60000E40000CC00007000001825819C17>12 D<0001FE0FF0000307380C000607700C00
0C06601C001C00E00C001C00C000001C01C000003801C000003801C000003801C0000038
03800003FFFFFFF000700380700070038070007003807000700780E000700700E0007007
00E000E00700E000E00701C000E00701C000E00E01C000E00E01C001C00E038801C00E03
8801C00E038801C01C039001C01C019003801C00E003801C000003803800000300380000
0300300000C630300000E638600000CC30C00000781F0000002625819C25>14
D<00030006000800180030006000C000C0018003000300060006000C000C001C00180018
00380030003000700070006000600060006000E000E000E000E000E00060006000600060
00600020003000100008000800102A7B9E11>40 D<001000100008000C00040006000600
0600060006000700070007000700070006000600060006000E000E000C000C001C001800
180038003000300060006000C000C001800300030006000C00180010006000C000102A80
9E11>I<0001000000030000000300000003000000030000000600000006000000060000
00060000000C0000000C0000000C0000FFFFFF00FFFFFF00001800000018000000180000
003000000030000000300000003000000060000000600000006000000060000000400000
191A7A9620>43 D<FFC0FFC0FFC00A037D890F>45 D<3078F06005047C830D>I<003E00
00C1800101800200C00400C00440C00841C00841C00841C0088380070380000700000E00
01F800003800000C00000C00000E00000E00000E00000E00700E00E01C00801C00803800
80300040600021C0001F0000121D7C9B15>51 D<001E000061000081800180800300C003
00C006018006018006018007030007860003CC0003F00001F000037800063C00081E0018
0E00300E00600600600600600600C00C00C00C00C0180060100060200030C0000F000012
1D7C9B15>56 D<0000180000001800000038000000380000007800000078000000B80000
01B800000138000002380000023C0000041C0000041C0000081C0000181C0000101C0000
201C0000201C00007FFC0000401C0000801C0001801C0001001C0002001C0002001C0004
000E000C000E001C001E00FF00FFC01A1D7E9C1F>65 D<01FFFE00003C0780003803C000
3801C0003801C0003801C0007001C0007003C0007003C00070078000E0070000E00E0000
E03C0000FFF80001C01C0001C00E0001C00F0001C00F0003800F0003800F0003800F0003
800F0007001E0007001C0007003C00070078000E01E000FFFF80001A1C7D9B1D>I<0003
F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000801E0000801C00
00803C0000803C000000780000007800000078000000F0000000F0000000F0000000F000
0000F0000400F0000400F0000400F0000800700008007000100038002000180040000C01
80000706000001F800001B1E7A9C1E>I<01FFFFE0003C00E00038006000380040003800
40003800400070004000700040007020400070200000E0400000E0400000E0C00000FFC0
0001C0800001C0800001C0800001C0800003810100038001000380020003800200070004
000700040007000C00070018000E007800FFFFF0001B1C7D9B1C>69
D<01FFFFC0003C01C0003800C00038008000380080003800800070008000700080007020
800070200000E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C080
0003810000038000000380000003800000070000000700000007000000070000000F0000
00FFF000001A1C7D9B1B>I<0003F020001E0C60003002E000E003C001C001C0038001C0
070000C00E0000801E0000801C0000803C0000803C000000780000007800000078000000
F0000000F0000000F001FFC0F0001E00F0001C00F0001C00F0001C00F0001C0070003800
7000380038003800180078000C0090000707100001F800001B1E7A9C20>I<01FFC0003C
0000380000380000380000380000700000700000700000700000E00000E00000E00000E0
0001C00001C00001C00001C0000380000380000380000380000700000700000700000700
000F0000FFE000121C7E9B10>73 D<01FFE0003C00003800003800003800003800007000
00700000700000700000E00000E00000E00000E00001C00001C00001C00001C000038008
0380080380080380100700100700300700600700E00E03C0FFFFC0151C7D9B1A>76
D<01FE0007F8003E000780002E000F00002E001700002E001700002E002700004E002E00
004E004E00004E004E00004E008E00008E011C00008E011C00008E021C00008E021C0001
070438000107043800010708380001071038000207107000020720700002072070000207
407000040740E000040780E000040700E0000C0700E0001C0601E000FF861FFC00251C7D
9B25>I<01FC03FE001C0070003C0060002E0040002E0040002E00400047008000470080
00470080004380800083810000838100008181000081C1000101C2000101C2000100E200
0100E2000200E4000200740002007400020074000400380004003800040038000C001800
1C001000FF8010001F1C7D9B1F>I<0007F000001C1C0000700E0000E0070001C0038003
800380070003800E0003C01E0003C01C0003C03C0003C03C0003C0780003C0780003C078
0003C0F0000780F0000780F0000780F0000F00F0000F00F0000E00F0001E00F0003C0070
003800700070007800E0003801C0001C0380000E0E000003F800001A1E7A9C20>I<01FF
FC00003C070000380380003801C0003801C0003801C0007003C0007003C0007003C00070
038000E0078000E0070000E00E0000E0380001FFE00001C0000001C0000001C000000380
0000038000000380000003800000070000000700000007000000070000000F000000FFE0
00001A1C7D9B1C>I<01FFF800003C0E0000380700003803800038038000380380007007
80007007800070078000700F0000E00E0000E01C0000E0700000FFC00001C0C00001C060
0001C0700001C07000038070000380700003807000038070000700F0000700F0400700F0
400700F0800F007880FFE0790000001E001A1D7D9B1E>82 D<000F8400304C00403C0080
1801001803001803001806001006001006000007000007000003E00003FC0001FF00007F
800007C00001C00001C00000C00000C02000C02000C0600180600180600300600200F004
00CC180083E000161E7D9C17>I<1FFFFFC01C0701C0300E00C0200E0080600E0080400E
0080401C0080801C0080801C0080001C0000003800000038000000380000003800000070
000000700000007000000070000000E0000000E0000000E0000000E0000001C0000001C0
000001C0000001C0000003C000007FFE00001A1C799B1E>I<7FF0FF800F001C000E0018
000E0010000E0010000E0010001C0020001C0020001C0020001C00200038004000380040
00380040003800400070008000700080007000800070008000E0010000E0010000E00100
00E0020000E0020000E0040000E00400006008000030300000104000000F800000191D77
9B1F>I<01FF81FE001E00F0001C0060001E0080000E0180000E0100000F020000070400
00070800000790000003A0000003C0000001C0000001C0000001E0000002E0000004E000
0008F0000010700000207000006038000040380000803C0001001C0002001C0006001E00
1E001E00FF80FFC01F1C7E9B1F>88 D<03CC063C0C3C181C3838303870387038E070E070
E070E070E0E2C0E2C0E261E462643C380F127B9115>97 D<3F00070007000E000E000E00
0E001C001C001C001C0039C03E60383038307038703870387038E070E070E070E060E0E0
C0C0C1C0618063003C000D1D7B9C13>I<01F007080C08181C3838300070007000E000E0
00E000E000E000E008E010602030C01F000E127B9113>I<001F80000380000380000700
000700000700000700000E00000E00000E00000E0003DC00063C000C3C00181C00383800
303800703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E400626400
3C3800111D7B9C15>I<01E007100C1018083810701070607F80E000E000E000E000E000
E0086010602030C01F000D127B9113>I<0003C0000670000C70001C60001C00001C0000
380000380000380000380000380003FF8000700000700000700000700000700000E00000
E00000E00000E00000E00001C00001C00001C00001C00001C00003800003800003800003
0000030000070000C60000E60000CC00007800001425819C0D>I<00F3018F030F06070E
0E0C0E1C0E1C0E381C381C381C381C383830383038187818F00F700070007000E000E0C0
C0E1C0C3007E00101A7D9113>I<0FC00001C00001C00003800003800003800003800007
00000700000700000700000E78000E8C000F0E000E0E001C0E001C0E001C0E001C0E0038
1C00381C00381C00383800703880703880707080707100E03200601C00111D7D9C15>I<
01800380010000000000000000000000000000001C002600470047008E008E000E001C00
1C001C0038003800710071007100720072003C00091C7C9B0D>I<0006000E0006000000
000000000000000000000000F00118021802180438043800380038007000700070007000
E000E000E000E001C001C001C001C003800380C300E700CE0078000F24819B0D>I<0FC0
0001C00001C0000380000380000380000380000700000700000700000700000E0F000E11
000E23800E43801C83001C80001D00001E00003F800039C00038E00038E00070E20070E2
0070E20070E400E06400603800111D7D9C13>I<1F800380038007000700070007000E00
0E000E000E001C001C001C001C0038003800380038007000700070007000E400E400E400
E40068003800091D7C9C0B>I<3C1E0780266318C04683A0E04703C0E08E0380E08E0380
E00E0380E00E0380E01C0701C01C0701C01C0701C01C070380380E0388380E0388380E07
08380E0710701C0320300C01C01D127C9122>I<3C3C002646004687004707008E07008E
07000E07000E07001C0E001C0E001C0E001C1C00381C40381C4038384038388070190030
0E0012127C9117>I<01E007180C0C180C380C300E700E700EE01CE01CE01CE018E038E0
30E06060C031801E000F127B9115>I<07870004D98008E0C008E0C011C0E011C0E001C0
E001C0E00381C00381C00381C00381800703800703000707000706000E8C000E70000E00
000E00001C00001C00001C00001C00003C0000FF8000131A7F9115>I<3C3C26C2468747
078E068E000E000E001C001C001C001C0038003800380038007000300010127C9112>
114 D<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C030806060
C01F000E127D9111>I<00C001C001C001C00380038003800380FFE00700070007000E00
0E000E000E001C001C001C001C00384038403840388019000E000B1A7D990E>I<1E0300
270700470700470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C00383880
3838801838801839001C5900078E0011127C9116>I<1E06270E470E4706870287020E02
0E021C041C041C041C0818083808181018200C4007800F127C9113>I<1E018327038747
03874703838707018707010E07010E07011C0E021C0E021C0E021C0E04180C04181C0418
1C081C1C100C263007C3C018127C911C>I<070E0019910010E38020E38041C30041C000
01C00001C000038000038000038000038000070200670200E70400CB04008B080070F000
11127D9113>I<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C3838383818
3818381C7007F00070007000E0E0C0E1C0818047003C00101A7C9114>I<038207C20FEC
08381008001000200040008001000200040008081008383067F043E081C00F127D9111>
I E /Fk 87 128 df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0
000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0
000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0
000E01C0000E01C0000E01C0007F87FC001A1D809C18>11 D<007E0001C1800301800703
C00E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01
C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
C07F87F8151D809C17>I<007FC001C1C00303C00703C00E01C00E01C00E01C00E01C00E
01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17>I<003F07
E00001C09C18000380F018000701F03C000E01E03C000E00E018000E00E000000E00E000
000E00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C00
0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E
00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80211D
809C23>I<E0E0F070380C0406077B9C15>18 D<1C1C3C3870C0800707779C15>I<6060F0
F0F8F86868080808080808101010102020404080800D0C7F9C15>34
D<0F0000C0188000C030600380703807006027FB00E0100600E0100C00E0100C00E01018
00E0101800E0103000E0106000602060007020C00030418000188180000F0303C0000606
2000060C10000C1C08001818080018380400303804006038040060380400C0380400C038
04018038040300180803001C0806000C100C000620040003C01E217E9E23>37
D<00E0000001900000030800000308000007080000070800000708000007080000071000
0007100000072000000740000003C03FE003800F00038006000380040005C0040009C008
0010E0100030E010006070200060702000E0384000E03C4000E01C8000E00F0020E00700
20700780403009C0401830E18007C03E001B1F7E9D20>I<60F0F8680808081010204080
050C7C9C0C>I<004000800100020006000C000C00180018003000300070006000600060
00E000E000E000E000E000E000E000E000E000E000E000E0006000600060007000300030
00180018000C000C00060002000100008000400A2A7D9E10>I<80004000200010001800
0C000C000600060003000300038001800180018001C001C001C001C001C001C001C001C0
01C001C001C001C0018001800180038003000300060006000C000C001800100020004000
80000A2A7E9E10>I<000600000006000000060000000600000006000000060000000600
00000600000006000000060000000600000006000000060000FFFFFFE0FFFFFFE0000600
000006000000060000000600000006000000060000000600000006000000060000000600
000006000000060000000600001B1C7E9720>43 D<60F0F0701010101020204080040C7C
830C>I<FFE0FFE00B0280890E>I<60F0F06004047C830C>I<0001000300060006000600
0C000C000C0018001800180030003000300060006000C000C000C0018001800180030003
000300060006000C000C000C00180018001800300030003000600060006000C000C00010
297E9E15>I<03C00C301818300C300C700E60066006E007E007E007E007E007E007E007
E007E007E007E007E007E00760066006700E300C300C18180C3007E0101D7E9B15>I<03
0007003F00C7000700070007000700070007000700070007000700070007000700070007
0007000700070007000700070007000F80FFF80D1C7C9B15>I<07C01830201C400C400E
F00FF80FF807F8077007000F000E000E001C001C00380070006000C00180030006010C01
180110023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C781E780E781E381E001C00
1C00180030006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C18
3007E0101D7E9B15>I<000C00000C00001C00003C00003C00005C0000DC00009C00011C
00031C00021C00041C000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C
00001C00001C00001C00001C00001C00001C0001FFC0121C7F9B15>I<300C3FF83FF03F
C020002000200020002000200023E024302818301C200E000E000F000F000F600FF00FF0
0FF00F800E401E401C2038187007C0101D7E9B15>I<00F0030C06040C0E181E301E300C
700070006000E3E0E430E818F00CF00EE006E007E007E007E007E007600760077006300E
300C18180C3003E0101D7E9B15>I<4000007FFF807FFF007FFF00400200800400800400
80080000100000100000200000600000400000C00000C00001C000018000018000038000
038000038000038000078000078000078000078000078000078000030000111D7E9B15>
I<03E00C301008200C20066006600660067006780C3E083FB01FE007F007F818FC307E60
1E600FC007C003C003C003C00360026004300C1C1007E0101D7E9B15>I<03C00C301818
300C700C600EE006E006E007E007E007E007E0076007700F300F18170C2707C700060006
000E300C780C78187010203030C00F80101D7E9B15>I<60F0F060000000000000000000
0060F0F06004127C910C>I<60F0F0600000000000000000000060F0F070101010102020
4080041A7C910C>I<0FE03038401CE00EF00EF00EF00E000C001C0030006000C0008001
800100010001000100010001000000000000000000000003000780078003000F1D7E9C14
>63 D<000600000006000000060000000F0000000F0000000F0000001780000017800000
1780000023C0000023C0000023C0000041E0000041E0000041E0000080F0000080F00001
80F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E000C
001F001E001F00FF80FFF01C1D7F9C1F>65 D<FFFFC00F00F00F00380F003C0F001C0F00
1E0F001E0F001E0F001E0F001C0F003C0F00780F01F00FFFE00F00780F003C0F001E0F00
0E0F000F0F000F0F000F0F000F0F000F0F001E0F001E0F003C0F0078FFFFE0181C7E9B1D
>I<001F808000E0618001801980070007800E0003801C0003801C000180380001807800
00807800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F000
0000F0000000700000807800008078000080380000801C0001001C0001000E0002000700
04000180080000E03000001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F000E
000F0007000F0007000F0003800F0003C00F0001C00F0001C00F0001E00F0001E00F0001
E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F0003
800F0007800F0007000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F
003C0F000C0F00040F00040F00060F00020F00020F02020F02000F02000F02000F06000F
FE000F06000F02000F02000F02000F02010F00010F00020F00020F00020F00060F00060F
000C0F003CFFFFFC181C7E9B1C>I<FFFFF80F00780F00180F00080F00080F000C0F0004
0F00040F02040F02000F02000F02000F06000FFE000F06000F02000F02000F02000F0200
0F00000F00000F00000F00000F00000F00000F00000F8000FFF800161C7E9B1B>I<001F
808000E0618001801980070007800E0003801C0003801C00018038000180780000807800
008070000080F0000000F0000000F0000000F0000000F0000000F0000000F000FFF0F000
0F80700007807800078078000780380007801C0007801C0007800E00078007000B800180
118000E06080001F80001C1E7E9C21>I<FFF3FFC00F003C000F003C000F003C000F003C
000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000FFFFC
000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C
000F003C000F003C000F003C000F003C00FFF3FFC01A1C7E9B1F>I<FFF00F000F000F00
0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
0F000F000F000F000F00FFF00C1C7F9B0F>I<1FFF00F800780078007800780078007800
780078007800780078007800780078007800780078007800787078F878F878F878F0F040
E021C01F00101D7F9B15>I<FFF03FE00F000F000F000C000F0008000F0010000F002000
0F0040000F0080000F0100000F0200000F0400000F0E00000F1F00000F2F00000F278000
0F4780000F83C0000F01E0000F01E0000F00F0000F00F8000F0078000F003C000F003C00
0F001E000F001F000F001F80FFF07FF01C1C7E9B20>I<FFF8000F80000F00000F00000F
00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
00000F00000F00080F00080F00080F00180F00180F00100F00300F00700F01F0FFFFF015
1C7E9B1A>I<FF8000FF800F8000F8000F8000F8000BC00178000BC00178000BC0017800
09E002780009E002780008F004780008F004780008F00478000878087800087808780008
78087800083C107800083C107800083C107800081E207800081E207800081E207800080F
407800080F40780008078078000807807800080780780008030078001C03007800FF8307
FF80211C7E9B26>I<FF007FC00F800E000F8004000BC0040009E0040009E0040008F004
0008F8040008780400083C0400083C0400081E0400080F0400080F0400080784000807C4
000803C4000801E4000801E4000800F40008007C0008007C0008003C0008003C0008001C
0008000C001C000C00FF8004001A1C7E9B1F>I<003F800000E0E0000380380007001C00
0E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0
F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0
380003803C0007801C0007000E000E0007001C000380380000E0E000003F80001B1E7E9C
20>I<FFFF800F00E00F00780F003C0F001C0F001E0F001E0F001E0F001E0F001E0F001C
0F003C0F00780F00E00FFF800F00000F00000F00000F00000F00000F00000F00000F0000
0F00000F00000F00000F0000FFF000171C7E9B1C>I<003F800000E0E000038038000700
1C000E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F000
01E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C07800
03C0380003803C0E07801C1107000E208E0007205C0003A0780000F0E020003FE0200000
602000003060000038E000003FC000003FC000001F8000000F001B257E9C20>I<FFFF00
000F01E0000F0078000F003C000F001C000F001E000F001E000F001E000F001E000F001C
000F003C000F0078000F01E0000FFF00000F03C0000F00E0000F00F0000F0078000F0078
000F0078000F0078000F0078000F0078000F0078100F0078100F0038100F003C20FFF01C
20000007C01C1D7E9B1F>I<07E0801C1980300580700380600180E00180E00080E00080
E00080F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C0
0001C08001C08001C08001C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>
I<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F0020800F00
20000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00
00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F80
0003FFFC001B1C7F9B1E>I<FFF07FC00F000E000F0004000F0004000F0004000F000400
0F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F000400
0F0004000F0004000F0004000F0004000F0004000F0004000F0004000700080007800800
038010000180100000C020000070C000001F00001A1D7E9B1F>I<FFE00FF01F0003C00F
0001800F0001000F800300078002000780020003C0040003C0040003C0040001E0080001
E0080001F0080000F0100000F0100000F830000078200000782000003C4000003C400000
3C4000001E8000001E8000001F8000000F0000000F00000006000000060000000600001C
1D7F9B1F>I<FFE0FFE0FF1F001F003C1E001E00180F001F00100F001F00100F001F0010
07801F00200780278020078027802003C027804003C043C04003C043C04003E043C04001
E081E08001E081E08001E081E08000F100F10000F100F10000F100F100007900FA00007A
007A00007A007A00003E007C00003C003C00003C003C00003C003C000018001800001800
18000018001800281D7F9B2B>I<7FF0FFC00FC03E000780180003C0180003E0100001E0
200001F0600000F0400000788000007D8000003D0000001E0000001F0000000F0000000F
8000000F80000013C0000023E0000021E0000041F00000C0F8000080780001007C000300
3C0002001E0006001F001F003F80FFC0FFF01C1C7F9B1F>I<FFF007FC0F8001E0078000
8007C0018003C0010003E0020001F0020000F0040000F8040000780800007C1800003C10
00001E2000001F2000000F4000000FC00000078000000780000007800000078000000780
00000780000007800000078000000780000007800000078000007FF8001E1C809B1F>I<
7FFFF07C01F07001E06003C06003C0400780400F80400F00401E00001E00003C00007C00
00780000F00000F00001E00003E00003C0100780100780100F00101F00301E00203C0020
3C00607800E0F803E0FFFFE0141C7E9B19>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07297C9E0C>I<0808101020
2040404040808080808080B0B0F8F8787830300D0C7A9C15>I<FEFE0606060606060606
0606060606060606060606060606060606060606060606060606060606FEFE0729809E0C
>I<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C0060
1C00E01C40E01C40E01C40603C40304E801F870012127E9115>97
D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C
001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C00
C01C01C01C01801E030019060010F800131D7F9C17>I<07E00C301878307870306000E0
00E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F00000700
00070000070000070000070000070000070000070000070000070003E7000C1700180F00
300700700700600700E00700E00700E00700E00700E00700E00700600700700700300700
180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000
E000E00060007002300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E
000E000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E
000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C3880181800381C00381C
00381C00381C001818001C38000C300013C0001000003000001800001FF8001FFF001FFF
803003806001C0C000C0C000C0C000C06001803003001C0E0007F800121C7F9215>I<FC
00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001C
87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
03801C03801C03801C0380FF9FF0141D7F9C17>I<18003C003C00180000000000000000
00000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C00FF80091D7F9C0C>I<00C001E001E000C00000000000000000000000000000
0FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E060E0F0C0F1C061803E000B25839C0D>I<FC00001C00001C00001C00001C
00001C00001C00001C00001C00001C00001C00001C3FC01C0F001C0C001C08001C10001C
20001C40001CE0001DE0001E70001C78001C38001C3C001C1C001C0E001C0F001C0F80FF
9FE0131D7F9C16>I<FC001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C
>I<FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01C01C001C01C01C
001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00
1C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D0300
1E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
1C03801C0380FF9FF014127F9117>I<03F0000E1C00180600300300700380600180E001
C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F0001212
7F9115>I<FC7C001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C
00E01C00E01C01C01C01C01C01801E03001D06001CF8001C00001C00001C00001C00001C
00001C00001C0000FF8000131A7F9117>I<03C1000C3300180B00300F00700700700700
E00700E00700E00700E00700E00700E00700600700700700300F00180F000C370007C700
000700000700000700000700000700000700000700003FE0131A7E9116>I<FCE01D301E
781E781C301C001C001C001C001C001C001C001C001C001C001C001C00FFC00D127F9110
>I<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D060
8FC00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C001C001C001C
001C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F801C
03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
03801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C01001C01000E0200
0E020007040007040007040003880003880003D80001D00001D00000E00000E00000E000
00400013127F9116>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B
82000E1182000711C4000711C4000720C40003A0E80003A0E80003C0680001C0700001C0
700001803000008020001B127F911E>I<7F8FF00F03800F030007020003840001C80001
D80000F00000700000780000F800009C00010E00020E000607000403801E07C0FF0FF815
12809116>I<FF07E03C03801C01001C01000E02000E0200070400070400070400038800
03880003D80001D00001D00000E00000E00000E000004000004000008000008000F08000
F10000F300006600003C0000131A7F9116>I<7FFC70386038407040F040E041C003C003
8007000F040E041C043C0C380870087038FFF80E127F9112>I<FFFFF01401808B15>I<60
60F0F0F0F060600C047C9C15>127 D E /Fl 49 122 df<003F800001FFF00007E0FC00
0FC07E001F803F001F803F003F001F803F001F807F001FC07F001FC07F001FC07F001FC0
FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0
FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE07F001FC07F001FC07F001FC0
7F001FC03F001F803F001F801F803F001F803F000FC07E0007E0FC0001FFF000003F8000
1B277DA622>48 D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000
FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000
FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000
FE0000FE0000FE007FFFFE7FFFFE7FFFFE17277BA622>I<00FF800003FFF0000FFFFC00
1F03FE003800FF007C007F80FE003FC0FF003FC0FF003FE0FF001FE0FF001FE07E001FE0
3C003FE000003FE000003FC000003FC000007F8000007F000000FE000000FC000001F800
0003F0000003E00000078000000F0000001E0000003C00E0007000E000E000E001C001C0
038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF80
1B277DA622>I<007F800003FFF00007FFFC000F81FE001F00FF003F80FF003F807F803F
807F803F807F801F807F800F007F800000FF000000FF000000FE000001FC000001F80000
07F00000FFC00000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC000
003FE000003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C
007F003F01FE001FFFFC0007FFF00000FF80001B277DA622>I<00000E0000001E000000
3E0000007E000000FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C
7E0000387E0000707E0000E07E0000E07E0001C07E0003807E0007007E000E007E000E00
7E001C007E0038007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000
FE000000FE000000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007F
FFF81D277EA622>I<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0
000FFFC0000FFE00000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0
000FFFF8000F80FC000E003E000C003F0000001F8000001FC000001FC000001FE000001F
E018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078003F
803C007F001F01FE000FFFF80003FFF00000FF80001B277DA622>I<0007F000003FFC00
00FFFE0001FC0F0003F01F8007E03F800FC03F801FC03F801F803F803F801F003F800000
7F0000007F0000007F000000FF000000FF0FC000FF3FF800FF707C00FFC03E00FFC03F00
FF801F80FF801FC0FF001FC0FF001FE0FF001FE0FF001FE07F001FE07F001FE07F001FE0
7F001FE03F001FE03F001FC01F801FC01F803F800FC03F0007E07E0003FFFC0000FFF000
003FC0001B277DA622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07F
FFFFC07FFFFF807FFFFF0070000E0070000E0070001C00E0003800E0007000E000E00000
00E0000001C000000380000007800000078000000F0000000F0000001F0000001F000000
3F0000003E0000003E0000007E0000007E0000007E0000007E000000FE000000FE000000
FE000000FE000000FE000000FE000000FE000000FE0000007C0000003800001C297CA822
>I<003FC00001FFF00003FFFC0007C07E000F003F001E001F001E000F803E000F803E00
0F803F000F803F000F803FC00F003FF01F001FFC1E001FFE3C000FFFF80007FFE00003FF
F80001FFFC0001FFFE0007FFFF000F0FFF801E03FFC03C01FFC07C007FE078001FE0F800
07E0F80007E0F80003E0F80003E0F80003E0F80003C07C0003C07C0007803F000F001FC0
3E000FFFFC0003FFF800007FC0001B277DA622>I<007F800001FFF00007FFF8000FE0FC
001F807E003F803F007F003F007F001F80FF001F80FF001FC0FF001FC0FF001FC0FF001F
E0FF001FE0FF001FE0FF001FE07F001FE07F003FE03F003FE01F807FE00F807FE007C1DF
E003FF9FE0007E1FE000001FE000001FC000001FC000001FC000003F801F003F803F803F
003F803F003F807E003F807C001F01F8001E03F0000FFFE00007FF800001FE00001B277D
A622>I<1C003E007F00FF80FF80FF807F003E001C000000000000000000000000000000
000000001C003E007F00FF80FF80FF807F003E001C00091B7B9A13>I<00000380000000
0007C00000000007C0000000000FE0000000000FE0000000000FE0000000001FF0000000
001FF0000000003FF8000000003FF8000000003FF80000000073FC0000000073FC000000
00F3FE00000000E1FE00000000E1FE00000001C0FF00000001C0FF00000003C0FF800000
03807F80000007807FC0000007003FC0000007003FC000000E003FE000000E001FE00000
1E001FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF80000780007FC0000
700003FC0000700003FC0000E00001FE0000E00001FE0001E00001FF0001C00000FF0001
C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE2F297EA834>65
D<00003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F
8003FC00003F8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007
803FC0000003807FC0000003807F80000003807F8000000000FF8000000000FF80000000
00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000
00FF80000000007F80000000007F80000000007FC0000003803FC0000003803FC0000003
801FE0000003801FE0000007000FF00000070007F000000E0003FC00001E0001FE00003C
0000FF8000F800003FF007E000000FFFFFC0000003FFFF000000003FF8000029297CA832
>67 D<FFFFFFF80000FFFFFFFF8000FFFFFFFFE00003FC001FF80003FC0007FC0003FC00
01FE0003FC0000FF0003FC00007F8003FC00003FC003FC00001FC003FC00001FE003FC00
001FE003FC00000FF003FC00000FF003FC00000FF003FC00000FF003FC00000FF803FC00
000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00
000FF803FC00000FF803FC00000FF803FC00000FF003FC00000FF003FC00000FF003FC00
001FE003FC00001FE003FC00001FC003FC00003FC003FC00007F8003FC00007F0003FC00
01FE0003FC0003FC0003FC001FF800FFFFFFFFE000FFFFFFFF8000FFFFFFFC00002D297D
A835>I<FFFFFFFFE0FFFFFFFFE0FFFFFFFFE003FC001FE003FC0007F003FC0001F003FC
0001F003FC0000F003FC00007003FC00007003FC00007003FC01C07803FC01C03803FC01
C03803FC01C03803FC03C00003FC03C00003FC0FC00003FFFFC00003FFFFC00003FFFFC0
0003FC0FC00003FC03C00003FC03C00003FC01C00E03FC01C00E03FC01C00E03FC01C01C
03FC00001C03FC00001C03FC00001C03FC00003C03FC00003803FC00007803FC0000F803
FC0001F803FC0003F803FC001FF8FFFFFFFFF0FFFFFFFFF0FFFFFFFFF027297DA82D>I<
FFFFFFFFC0FFFFFFFFC0FFFFFFFFC003FC003FC003FC000FE003FC0003E003FC0001E003
FC0001E003FC0000E003FC0000E003FC0000E003FC0000F003FC03807003FC03807003FC
03807003FC03800003FC07800003FC07800003FC1F800003FFFF800003FFFF800003FFFF
800003FC1F800003FC07800003FC07800003FC03800003FC03800003FC03800003FC0380
0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
03FC00000003FC000000FFFFFC0000FFFFFC0000FFFFFC000024297DA82B>I<FFFFF01F
FFFEFFFFF01FFFFEFFFFF01FFFFE03FC00007F8003FC00007F8003FC00007F8003FC0000
7F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC0000
7F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FFFFFF
FF8003FFFFFFFF8003FFFFFFFF8003FC00007F8003FC00007F8003FC00007F8003FC0000
7F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC0000
7F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC0000
7F8003FC00007F80FFFFF01FFFFEFFFFF01FFFFEFFFFF01FFFFE2F297DA836>72
D<FFFFFCFFFFFCFFFFFC01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE
0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE
0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE
0001FE0001FE00FFFFFCFFFFFCFFFFFC16297EA81A>I<FFFE0000001FFFC0FFFE000000
1FFFC0FFFF0000003FFFC003FF0000003FF00003FF0000003FF00003BF80000077F00003
BF80000077F000039FC00000E7F000039FC00000E7F000038FE00001C7F000038FE00001
C7F0000387F0000387F0000387F0000387F0000387F0000387F0000383F8000707F00003
83F8000707F0000381FC000E07F0000381FC000E07F0000380FE001C07F0000380FE001C
07F0000380FF003807F00003807F003807F00003807F003807F00003803F807007F00003
803F807007F00003801FC0E007F00003801FC0E007F00003800FE1C007F00003800FE1C0
07F00003800FE1C007F000038007F38007F000038007F38007F000038003FF0007F00003
8003FF0007F000038001FE0007F000038001FE0007F000038000FC0007F000038000FC00
07F000FFFE00FC01FFFFC0FFFE007801FFFFC0FFFE007801FFFFC03A297DA841>77
D<0000FFE000000007FFFC0000003FC07F8000007F001FC00001FC0007F00003F80003F8
0007F00001FC000FF00001FE001FE00000FF001FE00000FF003FC000007F803FC000007F
807FC000007FC07F8000003FC07F8000003FC07F8000003FC0FF8000003FE0FF8000003F
E0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003F
E0FF8000003FE0FF8000003FE07F8000003FC07FC000007FC07FC000007FC03FC000007F
803FC000007F801FE00000FF001FE00000FF000FF00001FE0007F00001FC0003F80003F8
0001FC0007F00000FF001FE000003FC07F8000000FFFFE00000000FFE000002B297CA834
>79 D<FFFFFFF800FFFFFFFF00FFFFFFFFC003FC003FE003FC000FF003FC0007F803FC00
07FC03FC0003FC03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003
FE03FC0003FE03FC0003FC03FC0007FC03FC0007F803FC000FF003FC003FE003FFFFFF80
03FFFFFE0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC
00000003FC00000003FC000000FFFFF00000FFFFF00000FFFFF0000027297DA82F>I<FF
FFFFE00000FFFFFFFE0000FFFFFFFF800003FC007FE00003FC000FF00003FC0007F80003
FC0007FC0003FC0003FC0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003
FC0003FE0003FC0003FE0003FC0003FC0003FC0007F80003FC0007F80003FC001FE00003
FC007FC00003FFFFFE000003FFFFF0000003FC00FC000003FC007F000003FC003F800003
FC003F800003FC001FC00003FC001FE00003FC001FE00003FC001FE00003FC001FE00003
FC001FE00003FC001FF00003FC001FF00003FC001FF00003FC001FF00703FC001FF80703
FC000FF80703FC0007F80EFFFFF003FE1CFFFFF001FFF8FFFFF0003FF030297DA834>82
D<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03FC07E003FC007C078003FC003
C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E0003FC000E0E0003FC000
E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC0000000003FC000
0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000
0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000
0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000
0000003FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>84
D<FFFFF001FFFCFFFFF001FFFCFFFFF001FFFC03FC0000070003FC0000070003FC000007
0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
0003FC0000070001FC00000E0001FE00000E0000FE00001C00007E00001C00007F000038
00003FC000F000000FF007E0000007FFFFC0000001FFFF000000001FF800002E297DA835
>I<FFFFE07FFFF007FFF0FFFFE07FFFF007FFF0FFFFE07FFFF007FFF003FC0001FE0000
1C0003FC0001FE00001C0001FE0001FF0000380001FE0000FF0000380001FF0000FF0000
780000FF0000FF8000700000FF0000FF8000700000FF8000FF8000F000007F8001FFC000
E000007F8001FFC000E000003FC003FFE001C000003FC0039FE001C000003FE0039FE003
C000001FE0070FF0038000001FE0070FF0038000001FF00F0FF0078000000FF00E07F807
0000000FF00E07F80700000007F81E07FC0E00000007F81C03FC0E00000007FC1C03FC1E
00000003FC3801FE1C00000003FC3801FE1C00000001FE7801FF3800000001FE7000FF38
00000001FE7000FF3800000000FFF000FFF000000000FFE0007FF000000000FFE0007FF0
000000007FC0003FE0000000007FC0003FE0000000003FC0003FC0000000003F80001FC0
000000003F80001FC0000000001F80001F80000000001F00000F80000000001F00000F80
000000000E00000700000044297FA847>87 D<01FF800007FFF0000F81F8001FC07E001F
C07E001FC03F000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007
FC3F800FE03F803F803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E
007F807F00DF803F839FFC0FFF0FFC01FC03FC1E1B7E9A21>97 D<FFE0000000FFE00000
00FFE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000000
0FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE1FE00000F
E7FF80000FFE07E0000FF801F0000FF000F8000FE000FC000FE000FE000FE0007F000FE0
007F000FE0007F000FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE000
7F800FE0007F800FE0007F000FE0007F000FE0007F000FE000FE000FE000FC000FF001F8
000FF803F0000F9E07E0000F07FF80000E01FC0000212A7EA926>I<001FF80000FFFE00
03F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F000000FF000000
FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F0000007F800000
3F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE0001A1B7E9A1F>I<00
003FF80000003FF80000003FF800000003F800000003F800000003F800000003F8000000
03F800000003F800000003F800000003F800000003F800000003F800000003F800000003
F800001FE3F80000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8
007F0003F8007F0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800
FF0003F800FF0003F800FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F
8003F8000F8007F80007C00FF80003F03BFF8000FFF3FF80003FC3FF80212A7EA926>I<
003FE00001FFF80003F07E0007C01F000F801F801F800F803F800FC07F000FC07F0007C0
7F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F000000
7F0000007F0000003F8000E01F8000E00FC001C007E0038003F81F0000FFFE00001FF000
1B1B7E9A20>I<0007F0003FFC00FE3E01F87F03F87F03F07F07F07F07F03E07F00007F0
0007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F0
0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0
0007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915>I<00FF81F0
03FFE7F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F007F00
7F007F007F007F003F007E001F007C001F80FC000FC1F8001FFFE00018FF800038000000
380000003C0000003E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF0
3E0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F03C0001E01F0007C0
0FC01F8003FFFE00007FF0001E287E9A22>I<FFE0000000FFE0000000FFE00000000FE0
0000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000
00000FE00000000FE00000000FE00000000FE00000000FE07F00000FE1FFC0000FE787E0
000FEE03F0000FF803F0000FF803F8000FF003F8000FF003F8000FE003F8000FE003F800
0FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000F
E003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800FFFE
3FFF80FFFE3FFF80FFFE3FFF80212A7DA926>I<07000FC01FE03FE03FE03FE01FE00FC0
07000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE0
0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B
7DAA14>I<000700000F80001FC0003FE0003FE0003FE0001FC0000F8000070000000000
000000000000000000000000000000000001FFE001FFE001FFE0000FE0000FE0000FE000
0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000
0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000
0FE07C0FE0FE0FE0FE0FC0FE1F80FE1F007C3E003FFC000FF000133784AA15>I<FFE000
00FFE00000FFE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000
000FE000000FE000000FE000000FE000000FE000000FE01FFC0FE01FFC0FE01FFC0FE007
800FE00F000FE01E000FE03C000FE078000FE0E0000FE3C0000FE7C0000FEFE0000FFFE0
000FFFF0000FF3F8000FE3F8000FC1FC000FC0FE000FC07F000FC07F000FC03F800FC01F
C00FC00FC00FC00FE0FFFC3FFEFFFC3FFEFFFC3FFE1F2A7EA924>I<FFE0FFE0FFE00FE0
0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFE
FFFEFFFE0F2A7DA914>I<FFC07F800FF000FFC1FFE03FFC00FFC383F0707E000FC603F8
C07F000FCC01F9803F000FD801FF003F800FF001FE003F800FF001FE003F800FE001FC00
3F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F
800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F80
0FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F80FF
FE1FFFC3FFF8FFFE1FFFC3FFF8FFFE1FFFC3FFF8351B7D9A3C>I<FFC07F0000FFC1FFC0
00FFC787E0000FCE03F0000FD803F0000FD803F8000FF003F8000FF003F8000FE003F800
0FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000F
E003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
03F800FFFE3FFF80FFFE3FFF80FFFE3FFF80211B7D9A26>I<003FE00001FFFC0003F07E
000FC01F801F800FC03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007
F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800F
E03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I<FFE1FE00
00FFE7FF8000FFFE07E0000FF803F0000FF001F8000FE000FC000FE000FE000FE000FF00
0FE0007F000FE0007F000FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800F
E0007F800FE0007F800FE0007F000FE000FF000FE000FF000FE000FE000FE001FC000FF0
01F8000FF803F0000FFE0FE0000FE7FF80000FE1FC00000FE00000000FE00000000FE000
00000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000000FFFE0000
00FFFE000000FFFE00000021277E9A26>I<FFC1F0FFC7FCFFCE3E0FD87F0FD87F0FF07F
0FF03E0FF01C0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000
0FE0000FE0000FE0000FE0000FE0000FE000FFFF00FFFF00FFFF00181B7E9A1C>114
D<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF
803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC00
70FF01E0F7FFC0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000
F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007
F00007F00007F00007F00007F00007F00007F00007F00007F00007F03807F03807F03807
F03807F03807F03803F03803F87001F86000FFC0001F8015267FA51B>I<FFE03FF800FF
E03FF800FFE03FF8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
03F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003
F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE007F80007E007F8
0007E00FF80003F03BFF8001FFF3FF80003FC3FF80211B7D9A26>I<FFFE03FF80FFFE03
FF80FFFE03FF8007F000700007F000700007F800F00003F800E00003FC01E00001FC01C0
0001FC01C00000FE03800000FE038000007F070000007F070000007F8F0000003F8E0000
003FDE0000001FDC0000001FDC0000000FF80000000FF80000000FF800000007F0000000
07F000000003E000000003E000000001C00000211B7F9A24>I<FFFE7FFC0FFEFFFE7FFC
0FFEFFFE7FFC0FFE0FE007E000E007F003F001C007F003F001C007F807F803C003F807F8
038003F807F8038001FC0EFC070001FC0EFC070001FE1EFC0F0000FE1C7E0E0000FE1C7E
0E0000FF383F1E00007F383F1C00007F783F3C00003FF01FB800003FF01FB800003FF01F
F800001FE00FF000001FE00FF000000FC007E000000FC007E000000FC007E00000078003
C00000078003C0002F1B7F9A32>I<FFFC0FFF00FFFC0FFF00FFFC0FFF0007F003C00003
F807800001FC07800000FE0F000000FF1E0000007F3C0000003FF80000001FF00000000F
F00000000FF000000007F000000007F80000000FFC0000001FFE0000001EFE0000003C7F
000000783F800000F01FC00001E01FE00001C00FE00003C007F000FFF01FFF80FFF01FFF
80FFF01FFF80211B7F9A24>I<FFFE03FF80FFFE03FF80FFFE03FF8007F000700007F000
700007F800F00003F800E00003FC01E00001FC01C00001FC01C00000FE03800000FE0380
00007F070000007F070000007F8F0000003F8E0000003FDE0000001FDC0000001FDC0000
000FF80000000FF80000000FF800000007F000000007F000000003E000000003E0000000
01C000000001C000000003800000000380000038078000007C07000000FE0F000000FE0E
000000FE1E000000FE3C0000007C780000003FE00000000FC000000021277F9A24>I
E /Fm 41 123 df<00FC000182000703000607000E02000E00000E00000E00000E00000E
0000FFFF000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E
07000E07000E07000E07007F0FE0131A809915>12 D<00800100020004000C0008001800
3000300030006000600060006000E000E000E000E000E000E000E000E000E000E0006000
600060006000300030003000180008000C00040002000100008009267D9B0F>40
D<8000400020001000180008000C00060006000600030003000300030003800380038003
8003800380038003800380038003000300030003000600060006000C0008001800100020
004000800009267E9B0F>I<000C0000000C0000000C0000000C0000000C0000000C0000
000C0000000C0000000C0000000C0000000C0000000C0000FFFFFF80FFFFFF80000C0000
000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000
000C0000000C0000191A7E951E>43 D<60F0F07010101020204080040B7D830B>I<FFC0
FFC00A0280880D>I<60F0F06004047D830B>I<000C0000000C0000000C0000001E000000
1E0000003F000000270000002700000043800000438000004380000081C0000081C00000
81C0000100E0000100E00001FFE000020070000200700006007800040038000400380008
001C0008001C001C001E00FF00FFC01A1A7F991D>65 D<003F0201C0C603002E0E001E1C
000E1C0006380006780002700002700002F00000F00000F00000F00000F00000F0000070
00027000027800023800041C00041C00080E000803003001C0C0003F00171A7E991C>67
D<FFFFF00E00700E00300E00100E00180E00080E00080E00080E04000E04000E04000E0C
000FFC000E0C000E04000E04000E04000E00040E00040E00080E00080E00080E00180E00
380E0070FFFFF0161A7E991A>69 D<FFE7FF0E00700E00700E00700E00700E00700E0070
0E00700E00700E00700E00700E00700FFFF00E00700E00700E00700E00700E00700E0070
0E00700E00700E00700E00700E00700E0070FFE7FF181A7E991D>72
D<FF0003FC0F0003C00F0003C00B8005C00B8005C00B8005C009C009C009C009C009C009
C008E011C008E011C008E011C0087021C0087021C0083841C0083841C0083841C0081C81
C0081C81C0081C81C0080F01C0080F01C0080F01C0080601C01C0601C0FF861FFC1E1A7E
9923>77 D<0FC21836200E6006C006C002C002C002E00070007E003FE01FF807FC003E00
0E00070003800380038003C002C006E004D81887E0101A7E9915>83
D<7FFFFF00701C0700401C0100401C0100C01C0180801C0080801C0080801C0080001C00
00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00
00001C0000001C0000001C0000001C0000001C0000001C0000001C000003FFE000191A7F
991C>I<FF83FF0FF03C007801C01C007800801C007800800E007801000E007801000E00
9C010007009C020007009C020007010E020007010E020003810E04000382070400038207
040001C207080001C403880001C403880000E403900000E403900000E801D000007801E0
00007801E000007000E000007000E000003000C0000020004000241A7F9927>87
D<3F8070C070E020700070007007F01C7030707070E070E071E071E0F171FB1E3C10107E
8F13>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C
F8001F0E001E07001C03801C01801C01C01C01C01C01C01C01C01C01C01C01C01C03801C
03001E07001B0C0010F000121A7F9915>I<07F80C1C381C30087000E000E000E000E000
E000E0007000300438080C1807E00E107F8F11>I<007E00000E00000E00000E00000E00
000E00000E00000E00000E00000E0003CE000C3E00380E00300E00700E00E00E00E00E00
E00E00E00E00E00E00E00E00600E00700E00381E001C2E0007CFC0121A7F9915>I<07C0
1C3030187018600CE00CFFFCE000E000E000E0006000300438080C1807E00E107F8F11>
I<01F0031807380E100E000E000E000E000E000E00FFC00E000E000E000E000E000E000E
000E000E000E000E000E000E000E007FE00D1A80990C>I<0FCE18733030703870387038
7038303018602FC02000600070003FF03FFC1FFE600FC003C003C003C0036006381C07E0
10187F8F13>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00
001CF8001D0C001E0E001E0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E
001C0E001C0E001C0E00FF9FC0121A7F9915>I<18003C003C0018000000000000000000
00000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80
091A80990A>I<018003C003C001800000000000000000000000000FC001C001C001C001
C001C001C001C001C001C001C001C001C001C001C001C001C001C001C041C0E180E3007E
000A2182990C>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C
00001C3F801C1E001C18001C10001C20001C40001DC0001FE0001CE0001C70001C78001C
38001C1C001C1E001C1F00FF3FC0121A7F9914>I<FC001C001C001C001C001C001C001C
001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF
80091A80990A>I<FC7C1F001D8E63801E0781C01E0781C01C0701C01C0701C01C0701C0
1C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F8
1D107F8F20>I<FCF8001D0C001E0E001E0E001C0E001C0E001C0E001C0E001C0E001C0E
001C0E001C0E001C0E001C0E001C0E00FF9FC012107F8F15>I<07E01C38300C700E6006
E007E007E007E007E007E0076006700E381C1C3807E010107F8F13>I<FCF8001F0E001E
07001C03801C03801C01C01C01C01C01C01C01C01C01C01C01C01C03801C03001E07001F
0C001CF0001C00001C00001C00001C00001C00001C0000FF800012177F8F15>I<03C200
0C2600381E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00700E00
381E001C2E0007CE00000E00000E00000E00000E00000E00000E00007FC012177F8F14>
I<FCE01D701E701E201C001C001C001C001C001C001C001C001C001C001C00FFC00C107F
8F0F>I<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F80
0C107F8F0F>I<0400040004000C000C001C003C00FFC01C001C001C001C001C001C001C
001C001C201C201C201C201C200E4003800B177F960F>I<FC7E001C0E001C0E001C0E00
1C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C1E000C2E0007CFC0
12107F8F15>I<FF1F803C06001C04001C04001E0C000E08000E08000710000710000790
0003A00003A00001C00001C00001C00000800011107F8F14>I<FF3F9F803C0E0700380E
06001C1604001C1704001E170C000E2308000E2388000F239800074190000741D00003C1
E0000380E0000380E0000180C0000100400019107F8F1C>I<FF3F803C1C001C18000E10
0007200007600003C00001C00001E00003E000027000043800083800181C00381E00FC3F
C012107F8F14>I<FF1F803C06001C04001C04001E0C000E08000E080007100007100007
900003A00003A00001C00001C00001C000008000008000010000010000E10000E20000E4
000078000011177F8F14>I<7FF86070407040E041C041C00380070007000E081C081C08
381070107030FFF00D107F8F11>I E /Fn 7 117 df<0003000000078000000780000007
8000000FC000000FC000001BE000001BE000001BE0000031F0000031F0000060F8000060
F80000E0FC0000C07C0000C07C0001803E0001FFFE0003FFFF0003001F0003001F000600
0F8006000F800E000FC0FFC07FFCFFC07FFC1E1A7F9921>65 D<0FF0001C3C003E1E003E
0E003E0F001C0F00000F0000FF000FCF003E0F007C0F00F80F00F80F00F80F00F817007C
27E01FC3E013117F9015>97 D<FE0000FE00001E00001E00001E00001E00001E00001E00
001E00001E7F001FC3C01F00E01E00F01E00781E00781E007C1E007C1E007C1E007C1E00
7C1E00781E00781E00F01F00E01D83C0187F00161A7F9919>I<03FC000F0E001C1F003C
1F00781F00780E00F80000F80000F80000F80000F800007800007800003C01801C03000F
060003FC0011117F9014>I<FC78FC9C1D3E1D3E1E3E1E1C1E001E001E001E001E001E00
1E001E001E00FFC0FFC00F117F9012>114 D<1FB020704030C030C030F000FF807FE03F
F807F8003CC00CC00CE00CE008F830CFE00E117F9011>I<06000600060006000E000E00
1E003FF0FFF01E001E001E001E001E001E001E001E001E181E181E181E181E180F3003E0
0D187F9711>I E /Fo 28 120 df<183E7E7F3F1F070E0E1CFCF8E0080D77851A>44
D<3078FCFC7830060676851A>46 D<003E0001FF8003FFC007C1E00F00E01E0F703C3FF0
387FF07070F870E07870E078E1C038E1C038E1C038E1C038E1C038E1C038E1C038E1C038
70E07070E0707070E0387FE03C3FC01E0F000F003807C0F803FFF001FFE0003F00151E7E
9D1A>64 D<003800007C00007C00006C0000EE0000EE0000EE0000C60000C60001C70001
C70001C70001C7000383800383800383800383800701C00701C007FFC007FFC00FFFE00E
00E00E00E00E00E00E00E01C00707F01FCFF83FE7F01FC171E7F9D1A>I<007C3801FF38
07FFF80F83F81E00F81C0078380078380038700038700038700000E00000E00000E00000
E00000E00000E00000E00000E000007000007000387000383800383800381C00701E00F0
0F83E007FFC001FF80007C00151E7E9D1A>67 D<FF83FEFF83FEFF83FE1C00701C00701C
00701C00701C00701C00701C00701C00701C00701C00701FFFF01FFFF01FFFF01C00701C
00701C00701C00701C00701C00701C00701C00701C00701C00701C0070FF83FEFF83FEFF
83FE171E7F9D1A>72 D<7E003F00FF007F807F007F001D80DC001D80DC001D80DC001DC1
DC001DC1DC001CC19C001CC19C001CE39C001CE39C001C631C001C771C001C771C001C36
1C001C361C001C3E1C001C1C1C001C1C1C001C001C001C001C001C001C001C001C001C00
1C001C001C001C001C007F007F00FF80FF807F007F00191E809D1A>77
D<0FFE003FFF807FFFC07C07C07001C0F001E0E000E0E000E0E000E0E000E0E000E0E000
E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001
E0F001E07001C07C07C07FFFC03FFF800FFE00131E7D9D1A>79 D<03F1C00FFDC03FFFC0
7C0FC07003C0E003C0E001C0E001C0E001C0E000007000007800003F00001FF00007FE00
00FF00000F800003C00001C00000E00000E06000E0E000E0E000E0E001C0F001C0FC0780
FFFF80EFFE00E3F800131E7D9D1A>83 D<7FFFFEFFFFFEFFFFFEE0380EE0380EE0380EE0
380E00380000380000380000380000380000380000380000380000380000380000380000
380000380000380000380000380000380000380000380000380003FF8003FF8003FF8017
1E7F9D1A>I<1FF0003FFC007FFE00780F00300700000380000380007F8007FF801FFF80
3F8380780380700380E00380E00380E00380700780780F803FFFFC1FFDFC07F0FC16157D
941A>97 D<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E3E000E
FF800FFFE00FC1F00F80700F00380E00380E001C0E001C0E001C0E001C0E001C0E001C0E
001C0F00380F00780F80F00FC1E00FFFC00EFF80063E00161E7F9D1A>I<00FF8003FFC0
0FFFE01F01E03C00C0780000700000700000E00000E00000E00000E00000E00000700000
7000007800703C00701F01F00FFFE003FFC000FE0014157D941A>I<001FC0001FC0001F
C00001C00001C00001C00001C00001C00001C001F1C007FDC00FFFC01E0FC03C07C07803
C07001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C07003C07003C03807C03E0F
C01FFFFC07FDFC01F1FC161E7E9D1A>I<01F80007FF000FFF801E07C03C01C07800E070
00E0E00070E00070FFFFF0FFFFF0FFFFF0E000007000007000007800703C00701F01F00F
FFE003FFC000FE0014157D941A>I<01F87C07FFFE0FFFFE1E078C1C03803801C03801C0
3801C03801C03801C01C03801E07801FFF001FFE0039F8003800003800001C00001FFF80
1FFFE03FFFF878007C70001CE0000EE0000EE0000EE0000E70001C78003C3E00F81FFFF0
07FFC001FF0017217F941A>103 D<00C00001E00001E00000C000000000000000000000
0000000000000000007FE0007FE0007FE00000E00000E00000E00000E00000E00000E000
00E00000E00000E00000E00000E00000E00000E00000E00000E0007FFF80FFFFC07FFF80
121F7C9E1A>105 D<000C001E001E000C0000000000000000000000000FFE0FFE0FFE00
0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E001C601CF038FFF87FF01FC00F2A7E9E1A>I<FE0000FE0000FE00
000E00000E00000E00000E00000E00000E00000E0FFC0E1FFE0E0FFC0E03C00E07800E0F
000E1E000E3C000E78000EFC000FFC000FDE000F8F000E07800E03800E01C00E01E00E00
F0FFE3FEFFE3FFFFE3FE181E7F9D1A>I<FFE000FFE000FFE00000E00000E00000E00000
E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
E00000E00000E00000E00000E00000E00000E00000E00000E000FFFFE0FFFFE0FFFFE013
1E7D9D1A>I<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C
1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C
1C001C1C1C007F1F1F00FF9F9F807F1F1F00191580941A>I<FE3E00FEFF80FFFFC00FC1
C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
E00E00E00E00E0FFE3FEFFE7FEFFE3FE17157F941A>I<01F00007FC001FFF003E0F803C
07807803C07001C0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C
07803E0F801FFF0007FC0001F00013157D941A>I<FE3E00FEFF80FFFFE00FC1F00F8070
0F00380E00380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F0
0FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E00000E00000E0000
FFE000FFE000FFE00016207F941A>I<7F83F0FF8FF87FBFFC03FC3C03F01803E00003C0
0003C0000380000380000380000380000380000380000380000380000380000380007FFF
00FFFF007FFF0016157E941A>114 D<00C00001C00001C00001C00001C00001C00001C0
007FFFE0FFFFE0FFFFE001C00001C00001C00001C00001C00001C00001C00001C00001C0
0001C00001C07001C07001C07001C07000E0E000FFE0007FC0001F00141C7F9B1A>116
D<FE0FE0FE0FE0FE0FE00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
E00E00E00E00E00E00E00E00E00E01E00F03E007FFFE03FFFE00FCFE17157F941A>I<FF
83FEFFC7FEFF83FE3800383800381C00701C00701C00701C38701C7C701C7C700E6CE00E
6CE00EEEE00EEEE00EEEE00EC6E006C6C007C7C007C7C003838017157F941A>119
D E /Fp 2 104 df<000F0038007000E001C001C001C001C001C001C001C001C001C001
C001C001C001C001C001C001C001C0038007001E00F0001E000700038001C001C001C001
C001C001C001C001C001C001C001C001C001C001C001C001C001C000E000700038000F10
317CA419>102 D<F0001E000700038001C001C001C001C001C001C001C001C001C001C0
01C001C001C001C001C001C001C000E000700038000F0038007000E001C001C001C001C0
01C001C001C001C001C001C001C001C001C001C001C001C001C0038007001E00F0001031
7CA419>I E /Fq 1 4 df<020002000200C218F2783AE00F800F803AE0F278C218020002
0002000D0E7E8E12>3 D E /Fr 37 122 df<E0E0F078381C06020108097BA218>18
D<70F8FCFC7404040404080810102040060F7C840E>44 D<FFE0FFE00B027F8B10>I<01
F000071C000C06001803003803803803807001C07001C07001C07001C0F001E0F001E0F0
01E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E070
01C07001C07001C07803C03803803803801C07000C0600071C0001F00013227EA018>48
D<008003800F80F380038003800380038003800380038003800380038003800380038003
80038003800380038003800380038003800380038003800380038007C0FFFE0F217CA018
>I<03F0000C1C001007002007804003C04003C08003E0F003E0F801E0F801E0F801E020
03E00003E00003C00003C0000780000700000E00001C0000180000300000600000C00001
80000100000200200400200800201800603000403FFFC07FFFC0FFFFC013217EA018>I<
000200000600000E00000E00001E00001E00002E00004E00004E00008E00008E00010E00
020E00020E00040E00040E00080E00100E00100E00200E00200E00400E00800E00FFFFF8
000E00000E00000E00000E00000E00000E00000E00001F0001FFF015217FA018>52
D<1000801E07001FFF001FFE001FF80013E0001000001000001000001000001000001000
0010F800130E001407001803801003800001C00001C00001E00001E00001E00001E07001
E0F001E0F001E0E001C08001C04003C04003802007001006000C1C0003F00013227EA018
>I<007E0001C1000300800601C00E03C01C03C018018038000038000078000070000070
0000F0F800F30C00F40600F40300F80380F801C0F001C0F001E0F001E0F001E0F001E0F0
01E07001E07001E07001E03801C03801C01803801C03000C0600070C0001F00013227EA0
18>I<70F8F8F870000000000000000000000070F8F8F87005157C940E>58
D<0001800000018000000180000003C0000003C0000003C0000005E0000005E000000DF0
000008F0000008F0000010F800001078000010780000203C0000203C0000203C0000401E
0000401E0000401E0000800F0000800F0000FFFF000100078001000780030007C0020003
C0020003C0040003E0040001E0040001E00C0000F00C0000F03E0001F8FF800FFF20237E
A225>65 D<0007E0100038183000E0063001C00170038000F0070000F00E0000701E0000
701C0000303C0000303C0000307C0000107800001078000010F8000000F8000000F80000
00F8000000F8000000F8000000F8000000F800000078000000780000107C0000103C0000
103C0000101C0000201E0000200E000040070000400380008001C0010000E0020000381C
000007E0001C247DA223>67 D<FFFFF0000F801E0007800700078003C0078001C0078000
E0078000F007800078078000780780007C0780003C0780003C0780003C0780003E078000
3E0780003E0780003E0780003E0780003E0780003E0780003E0780003E0780003C078000
3C0780007C0780007807800078078000F0078000E0078001E0078003C0078007000F801E
00FFFFF8001F227EA125>I<FFFFFFC00F8007C0078001C0078000C00780004007800040
078000600780002007800020078000200780202007802000078020000780200007806000
0780E00007FFE0000780E000078060000780200007802000078020000780200007800000
07800000078000000780000007800000078000000780000007800000078000000FC00000
FFFE00001B227EA120>70 D<0007F008003C0C1800E0021801C001B8038000F807000078
0F0000381E0000381E0000183C0000183C0000187C0000087800000878000008F8000000
F8000000F8000000F8000000F8000000F8000000F8000000F8001FFF780000F878000078
7C0000783C0000783C0000781E0000781E0000780F00007807000078038000B801C000B8
00E00318003C0C080007F00020247DA226>I<FFFC0FC007800780078007800780078007
800780078007800780078007800780078007800780078007800780078007800780078007
80078007800780078007800FC0FFFC0E227EA112>73 D<FFFFF0000F803C0007800F0007
800780078007C0078003C0078003E0078003E0078003E0078003E0078003E0078003E007
8003C0078007C00780078007800F0007803C0007FFF00007800000078000000780000007
800000078000000780000007800000078000000780000007800000078000000780000007
800000078000000FC00000FFFC00001B227EA121>80 D<7FFFFFF8780780786007801840
0780084007800840078008C007800C800780048007800480078004800780040007800000
078000000780000007800000078000000780000007800000078000000780000007800000
078000000780000007800000078000000780000007800000078000000780000007800000
07800000078000000FC00003FFFF001E227EA123>84 D<FFFC07FF0FC000F80780007007
800020078000200780002007800020078000200780002007800020078000200780002007
800020078000200780002007800020078000200780002007800020078000200780002007
800020078000200780002007800020078000200380004003C0004003C0004001C0008000
E000800060010000300600001C08000003F00020237EA125>I<0FE0001838003C0C003C
0E0018070000070000070000070000FF0007C7001E07003C0700780700700700F00708F0
0708F00708F00F087817083C23900FC1E015157E9418>97 D<01FE000703000C07801C07
80380300780000700000F00000F00000F00000F00000F00000F00000F000007000007800
403800401C00800C010007060001F80012157E9416>99 D<0000E0000FE00001E00000E0
0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E0
0C02E01C01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E0
7000E07800E03800E01801E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C03
801C01C03801C07801E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000
007800203800201C00400E008007030000FC0013157F9416>I<003C00C6018F038F030F
070007000700070007000700070007000700FFF807000700070007000700070007000700
070007000700070007000700070007000700070007807FF8102380A20F>I<00007001F1
98071E180E0E181C07001C07003C07803C07803C07803C07801C07001C07000E0E000F1C
0019F0001000001000001800001800001FFE000FFFC00FFFE03800F0600030400018C000
18C00018C000186000306000303800E00E038003FE0015217F9518>I<1C001E003E001E
001C00000000000000000000000000000000000E00FE001E000E000E000E000E000E000E
000E000E000E000E000E000E000E000E000E000E000E00FFC00A227FA10E>105
D<0E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B
237FA20E>108 D<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E0038
00E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800
E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E0
FFE3FF8FFE27157F942A>I<0E1F80FE60C01E80E00F00700F00700E00700E00700E0070
0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070
FFE7FF18157F941B>I<01FC000707000C01801800C03800E0700070700070F00078F000
78F00078F00078F00078F00078F000787000707800F03800E01C01C00E038007070001FC
0015157F9418>I<0E1F00FE61C00E80600F00700E00380E003C0E001C0E001E0E001E0E
001E0E001E0E001E0E001E0E001E0E003C0E003C0E00380F00700E80E00E41C00E3F000E
00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000171F7F941B>I<
0E3CFE461E8F0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E00
0E000F00FFF010157F9413>114 D<0F8830786018C018C008C008E008F0007F803FE00F
F001F8003C801C800C800CC00CC008E018D0308FC00E157E9413>I<0200020002000200
0600060006000E001E003E00FFF80E000E000E000E000E000E000E000E000E000E000E00
0E040E040E040E040E040E040708030801F00E1F7F9E13>I<0E0070FE07F01E00F00E00
700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00
700E00F00E00F006017003827800FC7F18157F941B>I<FFC1FE1E00780E00300E00200E
002007004007004003808003808003808001C10001C10000E20000E20000E20000740000
740000380000380000380000100017157F941A>I<FFC1FE1E00780E00300E00200E0020
07004007004003808003808003808001C10001C10000E20000E20000E200007400007400
003800003800003800001000001000002000002000002000004000F04000F08000F18000
4300003C0000171F7F941A>121 D E /Fs 21 122 df<00000700000000000700000000
000700000000000700000000000700000000000700000000000700000000000700000000
000700000000000700000000000700000000000700000000000700000000000700000000
000700000000000700000000000700000000000700000000000700000000000700000000
0007000000FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF000000700000000000700000000
000700000000000700000000000700000000000700000000000700000000000700000000
000700000000000700000000000700000000000700000000000700000000000700000000
000700000000000700000000000700000000000700000000000700000000000700000000
00070000002C2D7CA734>43 D<78FCFCFEFE7A020202020204040408081020204007147A
8512>I<78FCFCFCFC780000000000000000000000000000000000000078FCFCFCFC7806
1F7A9E12>58 D<00003FE0010001FFF8030007F01E03001F800307003E00008700780000
4F00F000002F01E000001F03C000000F078000000F0F800000070F000000071F00000003
1E000000033E000000033C000000017C000000017C000000017C000000017800000000F8
00000000F800000000F800000000F800000000F800000000F800000000F800000000F800
000000F800000000F800000000F80000000078000000007C000000007C000000017C0000
00013C000000013E000000011E000000011F000000020F000000020F8000000607800000
0403C000000801E000000800F00000100078000020003E0000C0001F8003800007F00F00
0001FFFC0000003FE00028337CB130>67 D<FFFF80007FF0FFFF80007FF007F000001F80
03E000001E0003E00000180003E00000100003E00000200003E00000400003E000008000
03E00001000003E00002000003E00004000003E00008000003E00010000003E000200000
03E00040000003E00080000003E00100000003E00200000003E00600000003E00F000000
03E01F80000003E02F80000003E047C0000003E087E0000003E103E0000003E201F00000
03E401F8000003E800F8000003F000FC000003E0007C000003E0003E000003E0003F0000
03E0001F000003E0000F800003E0000FC00003E00007C00003E00003E00003E00003F000
03E00001F00003E00000F80003E00000FC0003E000007C0003E000007E0003E000003F00
03E000003F0007F000007FC0FFFF8001FFF8FFFF8001FFF82D317CB034>75
D<00FE00000303C0000C00E00010007000100038003C003C003E001C003E001E003E001E
0008001E0000001E0000001E0000001E00000FFE0000FC1E0003E01E000F801E001F001E
003E001E003C001E007C001E00F8001E04F8001E04F8001E04F8003E04F8003E0478003E
047C005E043E008F080F0307F003FC03E01E1F7D9E21>97 D<07800000FF800000FF8000
000F80000007800000078000000780000007800000078000000780000007800000078000
00078000000780000007800000078000000780000007800000078000000781FC00078607
00078801C0079000E007A0007007C00078078000380780003C0780003C0780001E078000
1E0780001F0780001F0780001F0780001F0780001F0780001F0780001F0780001F078000
1F0780001E0780003E0780003C0780003C0780007807C00070072000F0072001E0061803
8006060F000401F80020327EB125>I<003F8000E0600380180700040F00041E001E1C00
3E3C003E7C003E7C0008780000F80000F80000F80000F80000F80000F80000F80000F800
00F800007800007C00007C00003C00011E00011E00020F000207000403801800E060003F
80181F7D9E1D>I<000001E000003FE000003FE0000003E0000001E0000001E0000001E0
000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0
000001E0000001E0000001E0001F81E000F061E001C019E0078005E00F0003E00E0003E0
1E0001E03C0001E03C0001E07C0001E0780001E0F80001E0F80001E0F80001E0F80001E0
F80001E0F80001E0F80001E0F80001E0F80001E0780001E0780001E03C0001E03C0001E0
1C0001E01E0003E00E0005E0070009E0038011F000E061FF003F81FF20327DB125>I<00
3F800000E0E0000380380007003C000E001E001E001E001C000F003C000F007C000F0078
000F8078000780F8000780F8000780FFFFFF80F8000000F8000000F8000000F8000000F8
000000F8000000780000007C0000003C0000003C0000801E0000800E0001000F00020007
80020001C00C0000F03000001FC000191F7E9E1D>I<000000F0007F030801C1C41C0380
E81C070070080F0078001E003C001E003C003E003E003E003E003E003E003E003E003E00
3E003E003E001E003C001E003C000F007800070070000780E00009C1C000087F00001800
0000180000001800000018000000180000001C0000000E0000000FFFF80007FFFF0003FF
FF800E000FC0180001E0300000F070000070E0000038E0000038E0000038E0000038E000
00387000007070000070380000E01C0001C00700070001C01C00003FE0001E2F7E9F21>
103 D<07000F801F801F800F800700000000000000000000000000000000000000000000
000780FF80FF800F80078007800780078007800780078007800780078007800780078007
8007800780078007800780078007800780078007800FC0FFF8FFF80D307EAF12>105
D<0780FF80FF800F80078007800780078007800780078007800780078007800780078007
800780078007800780078007800780078007800780078007800780078007800780078007
80078007800780078007800780078007800780078007800FC0FFFCFFFC0E327EB112>
108 D<0780FE001FC000FF83078060F000FF8C03C18078000F9001E2003C0007A001E400
3C0007A000F4001E0007C000F8001E0007C000F8001E00078000F0001E00078000F0001E
00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00
078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E0007
8000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E000780
00F0001E00078000F0001E00078000F0001E000FC001F8003F00FFFC1FFF83FFF0FFFC1F
FF83FFF0341F7E9E38>I<0780FE0000FF83078000FF8C03C0000F9001E00007A001E000
07A000F00007C000F00007C000F000078000F000078000F000078000F000078000F00007
8000F000078000F000078000F000078000F000078000F000078000F000078000F0000780
00F000078000F000078000F000078000F000078000F000078000F000078000F000078000
F000078000F0000FC001F800FFFC1FFF80FFFC1FFF80211F7E9E25>I<001FC00000F078
0001C01C00070007000F0007801E0003C01C0001C03C0001E03C0001E0780000F0780000
F0780000F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000
F8780000F07C0001F03C0001E03C0001E01E0003C01E0003C00F00078007800F0001C01C
0000F07800001FC0001D1F7E9E21>I<0783E0FF8C18FF907C0F907C07A07C07C03807C0
0007C00007C0000780000780000780000780000780000780000780000780000780000780
000780000780000780000780000780000780000780000780000780000FC000FFFE00FFFE
00161F7E9E19>114 D<01FC100E03301800F0300070600030E00030E00010E00010E000
10F00010F800007E00003FF0001FFF000FFFC003FFE0003FF00001F80000F880003C8000
3C80001CC0001CC0001CE0001CE00018F00038F00030CC0060C301C080FE00161F7E9E1A
>I<00400000400000400000400000400000C00000C00000C00001C00001C00003C00007
C0000FC0001FFFE0FFFFE003C00003C00003C00003C00003C00003C00003C00003C00003
C00003C00003C00003C00003C00003C00003C00003C00003C01003C01003C01003C01003
C01003C01003C01003C01001C02001E02000E0400078C0001F00142C7FAB19>I<FFF07F
F80FFCFFF07FF80FFC0FC007C003F00F8003C001C0078003C00080078003C0008003C003
E0010003C003E0010003C007E0010001E004F0020001E004F0020001E00870020000F008
78040000F00878040000F0103804000078103C08000078103C08000078201C0800003C20
1E1000003C201E1000003C400E1000001E400F2000001E400F2000001E80072000000F80
07C000000F8007C000000F0003C000000700038000000700038000000600018000000200
0100002E1F7F9E30>119 D<FFF801FF80FFF801FF800FC0007C00078000380007C00030
0003C000200003C000200001E000400001E000400001F000400000F000800000F0008000
00780100000078010000007C010000003C020000003C020000001E040000001E04000000
1F040000000F080000000F080000000790000000079000000007D000000003E000000003
E000000001C000000001C000000001C00000000080000000008000000001000000000100
000000010000000002000000000200000000040000007004000000F80C000000F8080000
00F810000000703000000030400000001F80000000212D7F9E23>121
D E /Ft 22 122 df<00000070000000000000F8000000000000F8000000000000F80000
00000000F8000000000000F8000000000000F8000000000000F8000000000000F8000000
000000F8000000000000F8000000000000F8000000000000F8000000000000F800000000
0000F8000000000000F8000000000000F8000000000000F8000000000000F80000000000
00F8000000000000F8000000000000F8000000000000F8000000000000F8000000000000
F80000007FFFFFFFFFFFF0FFFFFFFFFFFFF8FFFFFFFFFFFFF8FFFFFFFFFFFFF87FFFFFFF
FFFFF0000000F8000000000000F8000000000000F8000000000000F8000000000000F800
0000000000F8000000000000F8000000000000F8000000000000F8000000000000F80000
00000000F8000000000000F8000000000000F8000000000000F8000000000000F8000000
000000F8000000000000F8000000000000F8000000000000F8000000000000F800000000
0000F8000000000000F8000000000000F8000000000000F8000000000000700000003537
7BAC40>43 D<0000007C0000000000007C000000000000FE000000000000FE0000000000
00FE000000000001FF000000000001FF000000000003FF800000000003FF800000000007
FFC00000000007FFC00000000007FFC0000000000FFFE0000000000F7FE0000000001F7F
F0000000001E3FF0000000001E3FF0000000003E3FF8000000003C1FF8000000007C1FFC
00000000780FFC00000000780FFC00000000F80FFE00000000F007FE00000001F007FF00
000001E003FF00000001E003FF00000003E003FF80000003C001FF80000007C001FFC000
00078000FFC00000078000FFC000000FFFFFFFE000000FFFFFFFE000001FFFFFFFF00000
1E00003FF000001E00003FF000003C00003FF800003C00001FF800007C00001FFC000078
00000FFC00007800000FFC0000F0000007FE0000F0000007FE0001F0000007FF0003F800
0003FF00FFFFC001FFFFFEFFFFC001FFFFFEFFFFC001FFFFFE37317DB03E>65
D<000003FF80018000003FFFF003800001FFFFFC0F800007FF007F1F80001FF8000FBF80
003FE00003FF8000FF800000FF8001FF0000007F8003FE0000003F8007FC0000003F8007
FC0000001F800FF80000001F801FF80000000F801FF00000000F803FF000000007803FF0
00000007807FF000000007807FE000000007807FE000000000007FE00000000000FFE000
00000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000
000000FFE00000000000FFE00000000000FFE000000000007FE000000000007FE0000000
00007FE000000000007FF000000003803FF000000003803FF000000003801FF000000003
801FF800000007800FF8000000070007FC000000070007FC0000000E0003FE0000001E00
01FF0000003C0000FF8000007800003FE00000F000001FF80003E0000007FF003F800000
01FFFFFE000000003FFFF80000000003FF80000031317BB03C>67
D<FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF000FFC0003FF000FFC00007F800FFC00003
F800FFC00000F800FFC00000F800FFC000007800FFC000007800FFC000003800FFC00000
3800FFC000003800FFC000001C00FFC000001C00FFC007001C00FFC007001C00FFC00700
0000FFC007000000FFC007000000FFC00F000000FFC01F000000FFC03F000000FFFFFF00
0000FFFFFF000000FFFFFF000000FFC03F000000FFC01F000000FFC00F000000FFC00700
0000FFC007000000FFC007000000FFC007000000FFC007000000FFC000000000FFC00000
0000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC00000
0000FFC000000000FFC000000000FFC000000000FFC0000000FFFFFFF00000FFFFFFF000
00FFFFFFF000002E317EB034>70 D<FFFF8000000001FFFF80FFFFC000000003FFFF80FF
FFE000000007FFFF8000FFE000000007FF800000EFF00000000EFF800000EFF00000000E
FF800000EFF00000000EFF800000E7F80000001CFF800000E7F80000001CFF800000E3FC
00000038FF800000E3FC00000038FF800000E1FE00000070FF800000E1FE00000070FF80
0000E0FF000000E0FF800000E0FF000000E0FF800000E07F800001C0FF800000E07F8000
01C0FF800000E03FC0000380FF800000E03FC0000380FF800000E03FC0000380FF800000
E01FE0000700FF800000E01FE0000700FF800000E00FF0000E00FF800000E00FF0000E00
FF800000E007F8001C00FF800000E007F8001C00FF800000E003FC003800FF800000E003
FC003800FF800000E001FE007000FF800000E001FE007000FF800000E000FF00E000FF80
0000E000FF00E000FF800000E000FF00E000FF800000E0007F81C000FF800000E0007F81
C000FF800000E0003FC38000FF800000E0003FC38000FF800000E0001FE70000FF800000
E0001FE70000FF800000E0000FFE0000FF800000E0000FFE0000FF800000E00007FC0000
FF800000E00007FC0000FF800000E00007FC0000FF800000E00003F80000FF800001F000
03F80000FF8000FFFFE001F000FFFFFF80FFFFE001F000FFFFFF80FFFFE000E000FFFFFF
8049317EB04E>77 D<007FF8000003FFFF000007FFFFC0000FE01FE0001FF007F0001FF0
03F8001FF003FC001FF001FE000FE001FE0007C001FE00010001FE00000001FE00000001
FE000001FFFE00003FFFFE0001FFF1FE0007FE01FE000FF001FE001FC001FE003F8001FE
007F8001FE00FF0001FE00FF0001FE00FF0001FE00FF0001FE00FF0003FE007F8003FE00
7FC00EFE003FF03CFF000FFFF87FF807FFF03FF800FF800FF825207E9F28>97
D<01F8000000FFF8000000FFF8000000FFF80000000FF800000007F800000007F8000000
07F800000007F800000007F800000007F800000007F800000007F800000007F800000007
F800000007F800000007F800000007F800000007F80FF00007F87FFE0007F9FFFF8007FF
E03FC007FF000FE007FE0007F007F80003F807F80003FC07F80003FC07F80001FE07F800
01FE07F80001FE07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001
FF07F80001FF07F80001FF07F80001FE07F80001FE07F80001FE07F80003FC07F80003FC
07FC0007F807FE0007F007F7001FE007E3E07FC007C1FFFF0007807FFE0007001FE00028
327EB12E>I<0007FC0000003FFF800000FFFFE00003FC07F00007F801F8000FE000FC00
1FE0007E003FC0007E003FC0003F007FC0003F007F80003F007F80003F80FF80003F80FF
80003F80FFFFFFFF80FFFFFFFF80FFFFFFFF80FF80000000FF80000000FF800000007F80
0000007F800000003FC00000003FC00003801FC00003801FE00007800FF0000F0007F800
1E0003FE00FC0000FFFFF800003FFFE0000003FF000021207E9F26>101
D<0000FF000007FFC0001FFFE0003FC7F0007F0FF800FE0FF801FE0FF801FC0FF803FC07
F003FC03E003FC01C003FC000003FC000003FC000003FC000003FC000003FC000003FC00
00FFFFF800FFFFF800FFFFF80003FC000003FC000003FC000003FC000003FC000003FC00
0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00
0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00
0003FC000003FC00007FFFF0007FFFF0007FFFF0001D327EB119>I<001FF007E000FFFE
3FF001FFFF7FF807F83FF1F80FE00FE1F80FE00FE0F01FC007F0601FC007F0003FC007F8
003FC007F8003FC007F8003FC007F8003FC007F8001FC007F0001FC007F0000FE00FE000
0FE00FE00007F83FC00007FFFF000006FFFE00000E1FF000000E000000001E000000001E
000000001F000000001F800000001FFFFFC0000FFFFFF8000FFFFFFE0007FFFFFF0003FF
FFFF8007FFFFFFC01FFFFFFFE03F00007FE07E00000FF0FC000007F0FC000003F0FC0000
03F0FC000003F0FC000003F07E000007E03F00000FC01FC0003F800FF801FF0007FFFFFE
0000FFFFF000001FFF8000252F7E9F29>I<03C0000FF0000FF0001FF8001FF8001FFC00
1FF8001FF8000FF0000FF00003C000000000000000000000000000000000000000000000
00000001F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F800
07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
07F80007F80007F80007F80007F80007F800FFFF80FFFF80FFFF8011337DB217>105
D<01F8000000FFF8000000FFF8000000FFF80000000FF800000007F800000007F8000000
07F800000007F800000007F800000007F800000007F800000007F800000007F800000007
F800000007F800000007F800000007F800000007F8007FFC07F8007FFC07F8007FFC07F8
001FC007F8001F0007F8003E0007F800780007F801F00007F803E00007F807800007F81F
000007F83E000007F87C000007F9FE000007FBFF000007FFFF800007FF7FC00007FE3FE0
0007F81FE00007F01FF00007F00FF80007F007FC0007F003FE0007F001FF0007F000FF00
07F000FF8007F0007FC007F0003FE007F0003FF0FFFF80FFFFFFFF80FFFFFFFF80FFFF28
327EB12C>107 D<01F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007
F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
F80007F800FFFFC0FFFFC0FFFFC012327DB117>I<03F007F8000FF000FFF03FFF007FFE
00FFF07FFF80FFFF00FFF0F03FC1E07F800FF1C01FE3803FC007F3000FE6001FC007F600
0FFC001FE007FE000FFC001FE007FC000FF8001FE007FC000FF8001FE007F8000FF0001F
E007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800
0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001F
E007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800
0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001F
E0FFFFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40207D9F47>I<03F007F8
0000FFF03FFF0000FFF07FFF8000FFF0F03FC0000FF1C01FE00007F3000FE00007F6000F
F00007FE000FF00007FC000FF00007FC000FF00007F8000FF00007F8000FF00007F8000F
F00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000F
F00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000F
F00007F8000FF00007F8000FF00007F8000FF00007F8000FF000FFFFC1FFFF80FFFFC1FF
FF80FFFFC1FFFF8029207D9F2E>I<0007FE0000003FFFC00000FFFFF00003FC03FC0007
F000FE000FE0007F001FC0003F803FC0003FC03FC0003FC07F80001FE07F80001FE07F80
001FE0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF8000
1FF0FF80001FF07F80001FE07F80001FE07F80001FE03FC0003FC03FC0003FC01FE0007F
800FE0007F0007F801FE0003FE07FC0001FFFFF800003FFFC0000007FE000024207E9F29
>I<03F03F00FFF07FC0FFF1FFE0FFF3C7F00FF38FF807F70FF807F60FF807FE0FF807FC
07F007FC03E007FC008007F8000007F8000007F8000007F8000007F8000007F8000007F8
000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8
000007F8000007F80000FFFFE000FFFFE000FFFFE0001D207E9F22>114
D<00FF870007FFEF001FFFFF003F007F003C001F0078000F00F8000700F8000700F80007
00FC000700FF000000FFF800007FFFC0003FFFF0003FFFFC000FFFFE0007FFFF0001FFFF
80001FFF800000FFC000001FC060000FC0E00007C0E00007C0F00007C0F8000780F8000F
80FE000F00FF803E00FFFFFC00F3FFF800C07FC0001A207D9F21>I<0038000038000038
0000380000380000780000780000780000F80000F80001F80003F80007F8001FF800FFFF
FEFFFFFEFFFFFE07F80007F80007F80007F80007F80007F80007F80007F80007F80007F8
0007F80007F80007F80007F80007F80007F80007F80707F80707F80707F80707F80707F8
0707F80703F80E03FC0E01FE1C00FFF8007FF0000FE0182E7EAD20>I<01F80003F000FF
F801FFF000FFF801FFF000FFF801FFF0000FF8001FF00007F8000FF00007F8000FF00007
F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007
F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007
F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8001FF00007
F8001FF00003F8003FF00003F8006FF00001FE03CFF80000FFFF8FFF80007FFF0FFF8000
0FFC0FFF8029207D9F2E>I<FFFF0FFFF01FFEFFFF0FFFF01FFEFFFF0FFFF01FFE0FF000
7E0001F00FF8007F0001E007F8007F0001C007F8003F8003C003FC003F80038003FC007F
C0038003FE007FC0078001FE00FFC0070001FF00EFE00F0000FF00EFE00E0000FF01C7F0
0E00007F81C7F01C00007F83C7F01C00007FC383F83C00003FC383F83800003FC701FC38
00001FE701FC7000001FEF01FC7000001FFE00FEF000000FFE00FEE000000FFC007FE000
0007FC007FC0000007FC007FC0000007F8003FC0000003F8003F80000003F0001F800000
01F0001F00000001E0000F00000000E0000E000037207E9F3C>119
D<FFFF801FFEFFFF801FFEFFFF801FFE07F80003E007F80001C007FC0003C003FC000380
03FE00078001FE00070001FF000F0000FF000E0000FF801E00007F801C00007FC03C0000
3FC03800003FE03800001FE07000001FE07000000FF0E000000FF0E000000FF9E0000007
F9C0000007FFC0000003FF80000003FF80000001FF00000001FF00000000FE00000000FE
000000007C000000007C000000003800000000380000000070000000007000000000F000
003C00E000007E01E00000FF01C00000FF03800000FF07800000FF0F0000007A3E000000
7FFC0000003FF80000000FC0000000272E7E9F2C>121 D E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300dpi
TeXDict begin
%%PaperSize: A4

%%EndSetup
%%Page: 1 1
1 0 bop 242 335 a Ft(A)28 b(Customis)o(able)d(Memory)g(Managemen)n(t)
568 427 y(F)-7 b(ramew)n(ork)24 b(for)k(C++)94 518 y
Fs(Keyw)n(ords:)g(memory)21 b(managemen)n(t,)f(garbage)i(collection,)f
(C++)418 638 y Fr(Giusepp)q(e)c(A)o(ttardi,)e(Tito)h(Flagella)f(and)i
(Pietro)f(Iglio)1462 620 y Fq(\003)432 696 y Fr(Dipartimen)o(to)e(di)i
(Informatica,)f(Univ)o(ersit\022)-24 b(a)14 b(di)i(Pisa)571
754 y(Corso)i(Italia)d(40,)i(I-56125)h(Pisa,)e(Italy)454
813 y(net:)21 b Fp(f)p Fo(attardi,)h(tito,)i(iglio)p
Fp(g)p Fo(@di.u)o(nip)o(i.)o(it)856 1005 y Fn(Abstract)127
1070 y Fm(Automatic)12 b(garbage)g(collection)i(reliev)o(es)e
(programmers)g(from)f(the)g(burden)h(of)f(managing)i(memory)e(themselv)
o(es)70 1116 y(and)16 b(sev)o(eral)h(tec)o(hniques)h(ha)o(v)o(e)f(b)q
(een)g(dev)o(elop)q(ed)h(that)e(mak)o(e)h(garbage)g(collection)h
(feasible)g(in)f(man)o(y)g(situations,)70 1162 y(including)j(real)e
(time)f(applicatio)q(ns)j(or)d(within)i(traditional)h(programming)f
(languages.)31 b(Ho)o(w)o(ev)o(er)17 b(optimal)h(p)q(er-)70
1207 y(formance)e(cannot)h(alw)o(a)o(ys)g(b)q(e)f(ac)o(hiev)o(ed)i(b)o
(y)e(a)g(uniform)i(general)f(purp)q(ose)g(solution.)29
b(Sometimes)17 b(an)g(algorithm)70 1253 y(exhibits)h(a)f(predictable)h
(pattern)f(of)g(memory)f(usage)h(that)g(could)h(b)q(e)e(b)q(etter)h
(handled)i(sp)q(eci\014cally)m(,)h(dela)o(ying)e(as)70
1299 y(m)o(uc)o(h)e(as)h(p)q(ossible)h(the)f(in)o(terv)o(en)o(tion)i
(of)d(the)g(general)i(purp)q(ose)f(collector.)29 b(This)17
b(leads)g(to)g(the)f(requiremen)o(t)i(for)70 1344 y(algorithm)c(sp)q
(eci\014c)g(customisation)h(of)d(the)g(collector)i(strategies.)k(W)m(e)
13 b(presen)o(t)g(a)f(dynamic)i(memory)f(managemen)o(t)70
1390 y(framew)o(ork)h(whic)o(h)i(can)g(b)q(e)f(customised)i(to)d(the)i
(needs)f(of)g(an)g(algorithm,)i(while)g(preserving)g(the)e(con)o(v)o
(enience)i(of)70 1436 y(automatic)i(collection)h(in)e(the)g(normal)h
(case.)32 b(The)17 b(Customisable)j(Memory)e(Managemen)o(t)h(\(CMM\))f
(organizes)70 1481 y(memory)12 b(in)h(m)o(ultiple)i(heaps.)i(Eac)o(h)c
(heap)g(is)f(de\014ned)i(as)e(a)g(C++)g(class)h(whic)o(h)g
(encapsulates)h(a)f(particular)h(storage)70 1527 y(discipline.)21
b(The)13 b(default)h(heap)g(for)f(collectable)j(ob)r(jects)d(uses)h
(the)f(tec)o(hnique)i(of)e(mostly)h(cop)o(ying)h(garbage)f(collec-)70
1573 y(tion,)h(pro)o(viding)j(go)q(o)q(d)e(p)q(erformance)f(and)h
(memory)f(compaction.)24 b(Customisation)17 b(of)e(the)g(collector)h
(is)g(ac)o(hiev)o(ed)70 1618 y(exploiting)e(ob)r(ject)d(orien)o(tation)
j(b)o(y)d(de\014ning)j(sp)q(ecialised)g(v)o(ersions)f(of)e(the)g
(collector)i(metho)q(ds)f(for)f(eac)o(h)h(heap)g(class.)70
1664 y(The)j(ob)r(ject)h(orien)o(ted)h(in)o(terface)f(to)g(the)f
(collector)j(enables)f(co)q(existence)g(and)g(co)q(ordination)h(among)e
(the)g(v)n(arious)70 1710 y(collector)e(as)f(w)o(ell)h(as)f(in)o
(tegration)i(with)e(traditional)j(co)q(de)d(una)o(w)o(are)g(of)g
(garbage)h(collection.)19 b(The)13 b(CMM)g(is)g(imple-)70
1755 y(men)o(ted)i(in)h(C++)e(without)i(an)o(y)g(sp)q(ecial)h(supp)q
(ort)f(in)g(the)f(language)i(or)e(the)g(compiler.)25
b(The)15 b(tec)o(hniques)i(used)f(in)70 1801 y(the)d(CMM)g(are)g
(general)h(enough)g(to)f(b)q(e)h(applicable)i(also)e(to)f(other)g
(languages.)-34 1938 y Fl(1)69 b(In)n(tro)r(duction)-34
2029 y Fk(In)15 b(most)f(programmi)o(ng)e(languages,)i(memory)f(allo)q
(cation)g(is)i(either)h(under)g(total)e(resp)q(onsibilit)o(y)h(of)f
(the)i(programmer)-34 2079 y(or)e(under)g(full)f(con)o(trol)h(of)f(a)g
(garbage)h(collector.)28 2129 y(The)j(garbage)g(collector's)g(function)
g(is)f(to)h(\014nd)g(data)g(ob)r(jects)h(that)f(are)g(no)g(longer)f(in)
h(use)g(and)g(to)g(reclaim)e(their)-34 2179 y(space)e(for)f(further)i
(use)f(b)o(y)f(the)i(program.)h(An)e(ob)r(ject)g(is)g(considered)h
Fj(garb)n(age)p Fk(,)e(and)g(therefore)i(sub)r(ject)g(to)f
(reclamation,)-34 2229 y(if)g(it)i(is)f(not)g(reac)o(hable)h(b)o(y)g
(the)g(program)e(via)g(an)o(y)h(path)h(of)f(p)q(oin)o(ter)g(tra)o(v)o
(ersal.)20 b Fj(Live)15 b Fk(\(p)q(oten)o(tially)e(reac)o(hable\))i(ob)
r(jects)-34 2278 y(are)e(preserv)o(ed)i(b)o(y)e(the)h(collector,)e
(ensuring)i(that)f(the)h(program)d(can)i(nev)o(er)h(follo)o(w)d(a)i
(\\dangling)e(p)q(oin)o(ter")i(leading)f(to)h(a)-34 2328
y(deallo)q(cated)h(ob)r(ject.)28 2378 y(This)19 b(tec)o(hnique)h(has)f
(sev)o(eral)h(adv)n(an)o(tages)f(since)h(it)e(impro)o(v)o(es:)27
b Fj(safety)p Fk(,)20 b(a)o(v)o(oiding)d(the)j(risk)f(of)g(deallo)q
(cating)f(an)-34 2428 y(ob)r(ject)13 b(to)q(o)g(so)q(on;)f
Fj(ac)n(cur)n(acy)p Fk(,)h(a)o(v)o(oiding)e(the)i(risk)g(of)f
(forgetting)h(to)f(deallo)q(cate)h(un)o(used)g(memory;)e
Fj(simplicity)p Fk(,)g(assuming)-34 2478 y(a)k(computational)d(mo)q
(del)i(with)h(unlimited)e(memory;)g Fj(mo)n(dularity)p
Fk(,)i(the)g(program)f(do)q(es)i(not)f(ha)o(v)o(e)g(to)g(b)q(e)h(in)o
(tersp)q(ersed)-34 2527 y(with)d(b)q(o)q(okk)o(eeping)g(co)q(de)h(not)g
(related)g(to)f(the)h(application;)e Fj(bur)n(den)i Fk(on)f
(programmers)f(who)h(are)h(reliev)o(ed)g(from)d(taking)-34
2577 y(care)j(of)g(memory)d(managemen)o(t.)28 2627 y(Garbage)17
b(collection)h(has)g(b)q(een)g(mostly)e(a)o(v)n(ailable)g(in)h
(programming)d(languages)k(whose)g(design)g(had)f(tak)o(en)h(in)o(to)
-34 2677 y(accoun)o(t)f(its)g(requiremen)o(ts:)24 b(for)17
b(instance)g(not)g(allo)o(wing)e(p)q(oin)o(ter)i(manipulation)c
(\(Lisp\),)18 b(using)e(tagged)h(p)q(oin)o(ters)h(or)p
-34 2714 780 2 v 11 2740 a Fi(\003)29 2752 y Fh(The)12
b(researc)o(h)d(describ)q(ed)g(here)i(has)g(b)q(een)f(funded)g(in)h
(part)f(b)o(y)h(the)g(ESPRIT)h(Basic)e(Researc)o(h)g(Action,)h(pro)r
(ject)e(P)o(oSSo.)p eop
%%Page: 2 2
2 1 bop -34 161 a Fk(pro)o(viding)15 b(run-time)g(t)o(yp)q(e)i
(information,)d(using)i(sp)q(ecial)h(notation)e(for)h(p)q(oin)o(ter)h
(op)q(erations)g(\(Sim)o(ula\),)d(requiring)i(en-)-34
211 y(hanced)e(p)q(oin)o(ter)h(declarations)e(\(Mo)q(dula3\).)28
260 y(This)j(has)h(restricted)h(garbage)e(collection)g(from)e(general)j
(use,)g(more)e(than)h(the)h(often)g(cited)f(concerns)j(ab)q(out)d
(e\016-)-34 310 y(ciency)m(.)h(Recen)o(t)10 b(researc)o(h)i(has)e(pro)o
(v)o(ed)g(in)f(fact)h(that)g(the)g(p)q(erformance)g(of)f(garbage)g
(collectors)i(compares)e(quite)h(w)o(ell)f(with)-34 360
y(explicit)16 b(memory)e(deallo)q(cation)h(\(using)h(primitiv)o(es)e
(lik)o(e)i Fg(free)g Fk(or)g Fg(delete)p Fk(\))f([22)o(],)h(and)g(tec)o
(hniques)i(lik)o(e)d Fj(gener)n(ational)-34 410 y Fk(garbage)e
(collection)h(ha)o(v)o(e)g(b)q(een)h(dev)o(elop)q(ed)f(to)g(minim)o
(ise)d(latency)k(during)e(garbage)h(collection.)28 460
y(With)e(the)h(dev)o(elopmen)o(t)e(of)h(tec)o(hniques)h(for)f
Fj(c)n(onservative)h Fk(garbage)f(collection,)g(the)h(use)g(of)e
(garbage)h(collection)g(has)-34 510 y(b)q(ecome)k(feasible)h(also)f
(for)g(languages)g(whic)o(h)g(are)h(not)g(w)o(ell)f(b)q(eha)o(v)o(ed)h
(with)f(resp)q(ect)j(to)d(p)q(oin)o(ters.)27 b(Ev)o(en)17
b(so,)g(curren)o(t)-34 559 y(implemen)o(tati)o(ons)10
b(limit)g(the)j(use)g(of)e(p)q(oin)o(ters:)18 b(for)12
b(instance)h(in)f(Mo)q(dula3)g([15)o(])g(there)h(are)g(traced)h(p)q
(oin)o(ters)f(to)f(collected)-34 609 y(ob)r(jects)21
b(and)f(un)o(traced)h(p)q(oin)o(ters)f(to)g(uncollected)h(ob)r(jects)g
({)e(an)h(uncollected)h(ob)r(ject)g(can't)e(con)o(tain)h(an)f(un)o
(traced)-34 659 y(p)q(oin)o(ter.)28 709 y(One)f(problem)d(still)h
(needs)i(to)f(b)q(e)h(addressed:)25 b(in)o(teracting)17
b(with)g(the)g(collector,)h(whic)o(h)e(in)h(general)g(assumes)g(full)
-34 759 y(con)o(trol)c(of)h(memory)d(managemen)o(t.)28
808 y(The)16 b(fact)g(that)g(a)f(collector)h(assumes)g(total)f(con)o
(trol)g(of)g(memory)e(managemen)o(t)h(can)h(sometimes)f(b)q(e)j(a)e
(dra)o(wbac)o(k.)-34 858 y(F)m(or)g(instance,)h(it)f(b)q(ecomes)h
(harder)g(to)g(in)o(tegrate)g(co)q(de)g(or)f(libraries)h(whic)o(h)f
(are)h(una)o(w)o(are)f(of)g(garbage)h(collection)f(and)-34
908 y(use)i(p)q(oin)o(ters)g(without)f(restrictions,)h(it)f(is)g(imp)q
(ossible)f(to)h(mix)f(co)q(de)i(from)d(programming)f(languages)j(with)g
(di\013eren)o(t)-34 958 y(memory)c(mo)q(dels.)21 b(And)16
b(\014nally)m(,)d(as)i(w)o(e)h(argue)f(here,)h(it)f(is)g(imp)q(ossible)
f(to)h(sp)q(ecialise)h(the)f(collector)h(to)f(the)h(particular)-34
1008 y(needs)f(of)e(an)h(algorithm.)28 1057 y(A)g(general)f(purp)q(ose)
i(collector)e(strategy)i(ma)o(y)c(w)o(ork)i(w)o(ell)g(in)g(most)f
(circumstances,)i(but)g(there)h(are)e(cases)i(where)g(an)-34
1107 y(algorithm)d(within)i(an)h(application)f(exhibits)h(a)g
(predictable)h(pattern)f(of)g(memory)d(usage)k(whic)o(h)f(can)g(b)q(e)h
(exploited)f(to)-34 1157 y(ac)o(hiev)o(e)g(signi\014can)o(t)f(p)q
(erformance)g(b)q(ene\014ts.)22 b(When)15 b(the)h(collector)f(is)f
(alone)g(in)g(con)o(trol)h(of)f(memory)e(managemen)o(t,)g(it)-34
1207 y(b)q(ecomes)i(imp)q(ossible)d(to)j(arrange)g(for)f(allo)q(cating)
f(and)h(deallo)q(cating)g(ob)r(jects)h(in)f(a)h(sp)q(ecial)g(w)o(a)o(y)
e(during)i(the)g(execution)-34 1257 y(of)e(that)h(p)q(ortion)f(of)g
(the)i(application.)i(The)d(programmer)e(could)h(request)i(an)f(area)g
(of)f(memory)e(from)h(the)j(collector)f(and)-34 1307
y(arrange)g(for)f(managing)e(it)i(b)o(y)h(himself.)j(This)c(ho)o(w)o
(ev)o(er)h(w)o(ould)f(not)h(b)q(e)g(su\016cien)o(t)h(if)d(p)q(oin)o
(ters)j(are)f(allo)o(w)o(ed)e(from)g(within)-34 1356
y(suc)o(h)i(area)h(to)e(ob)r(jects)i(external)g(to)f(it.)k(Suc)o(h)c
(ob)r(jects)i(migh)o(t)10 b(still)i(b)q(e)i(reac)o(hable)f(but)h(the)f
(general)g(collector)g(w)o(ould)g(not)-34 1406 y(b)q(e)h(a)o(w)o(are)g
(of)f(them)g(and)h(migh)o(t)e(unduly)h(reclaim)g(their)h(space.)19
b(Therefore)c(if)e(the)i(user)g(w)o(an)o(ts)e(to)h(manage)e(memory)g(b)
o(y)-34 1456 y(himself,)f(some)i(form)f(of)i(co)q(ordination)f(with)g
(the)i(general)f(collector)g(is)g(necessary)m(.)28 1506
y(W)m(e)e(faced)g(a)g(situation)g(lik)o(e)f(this)h(when)h(dev)o
(eloping)e(memory)f(managemen)o(t)g(facilities)h(for)h(a)g(large)f
(researc)o(h)j(pro)r(ject)-34 1556 y(in)g(sym)o(b)q(olic)f(algebra:)20
b(the)c(ESPRIT)f(BRA)g(P)o(oSSo)f(whic)o(h)h(dev)o(elop)q(ed)h(a)f
(sophisticated)g(system)g(for)g(solving)e(systems)-34
1605 y(of)i(p)q(olynomial)d(equations.)23 b(The)16 b(core)g(algorithm)d
(of)i(P)o(oSSo)h(is)f(quite)h(memory)d(in)o(tensiv)o(e)i(and)h(ev)o(en)
g(the)g(b)q(est)h(tradi-)-34 1655 y(tional)12 b(garbage)h(collection)g
(tec)o(hniques)i(lead)e(to)g(thrashing)h(where)g(most)f(of)f(the)i
(time)e(is)i(sp)q(en)o(t)g(in)f(garbage)g(collection.)-34
1705 y(Ho)o(w)o(ev)o(er,)k(there)h(are)f(precise)h(p)q(oin)o(ts)e(in)g
(the)h(algorithm)d(where)k(all)d(data)h(created)i(during)f(the)g
(previous)g(step)g(of)f(the)-34 1755 y(algorithm)f(b)q(ecome)k(irrelev)
n(an)o(t)f(and)g(can)g(b)q(e)h(deallo)q(cated)g(in)f(blo)q(c)o(k.)31
b(By)18 b(customising)f(the)i(allo)q(cation)e(within)g(this)-34
1805 y(p)q(ortion)c(of)h(the)g(algorithm)d(signi\014can)o(t)j(impro)o
(v)o(emen)o(ts)d(in)j(p)q(erformance)f(ha)o(v)o(e)h(b)q(een)h(ac)o
(hiev)o(ed.)28 1854 y(The)g(requiremen)o(ts)h(of)e(this)h(pro)r(ject)h
(led)f(us)h(to)e(design)i(a)e(Customisable)g(Memory)g(Managemen)o(t)g
(\(CMM\))h(frame-)-34 1904 y(w)o(ork)g(where)i(sev)o(eral)f(p)q
(olicies)f(can)h(co)q(exist.)23 b(Users)17 b(can)f(c)o(ho)q(ose)g(the)g
(most)e(appropriate)i(one,)g(ranging)e(from)g(man)o(ual)-34
1954 y(managemen)o(t)g(to)i(fully)f(automatic)f(garbage)i(collection,)g
(and)h(can)f(also)g(implemen)o(t)d(their)k(o)o(wn)f(sp)q(ecialised)h
(memory)-34 2004 y(managemen)o(t.)29 b(The)19 b(extensibilit)o(y)f(of)g
(the)h(framew)o(ork)e(is)h(ac)o(hiev)o(ed)h(exploiting)e(the)j(ob)r
(ject)f(orien)o(ted)g(paradigm)d(of)-34 2054 y(C++,)e(thereb)o(y)h
(main)o(taini)o(ng)c(a)j(consisten)o(t)h(and)e(simple)g(in)o(terface)h
(for)g(programmers.)28 2104 y(The)g(CMM)g(framew)o(ork)f(consists)h(of)
g(t)o(w)o(o)f(abstract)i(classes:)16 2195 y(1.)21 b Fg(CmmHeap)p
Fk(:)16 b(base)f(class)f(for)f(heap)i(implem)o(en)o(tations)16
2278 y(2.)21 b Fg(CmmObject)p Fk(:)16 b(base)e(class)g(for)g(collected)
h(ob)r(jects)28 2369 y(Class)9 b Fg(CmmHeap)f Fk(encapsulates)j(the)f
(mec)o(hanisms)d(for)i(allo)q(cating)f(and)h(sca)o(v)o(ening)h(ob)r
(jects)g(within)f(an)g(area)g(of)g(memory)-34 2419 y(called)17
b(\\heap".)29 b(The)18 b(in)o(terface)g(of)f(a)g Fg(CmmHeap)f
Fk(pro)o(vides)i(a)f(set)i(of)e(necessary)i(facilities)e(for)g
(implemen)o(ting)d(custom)-34 2469 y(sp)q(eci\014c)h(memory)d(managem)o
(en)o(t)g(p)q(olicies.)28 2519 y(Along)g(with)g(the)i(abstract)f(class)
g Fg(CmmHeap)p Fk(,)e(CMM)i(includes)g(a)g(few)f(prede\014ned)j
(concrete)f(classes,)g(deriv)o(ed)f(from)e(it,)-34 2568
y(whic)o(h)j(implem)o(en)o(t)e(some)h(common)e(p)q(olicies:)28
2660 y Ff(\017)21 b Fk(class)9 b Fg(DefaultHeap)e Fk(pro)o(vides)j(a)f
(general)g(purp)q(ose)i(garbage)e(collector)h(whic)o(h)f(implemen)o(ts)
e(a)i(v)n(arian)o(t)f(of)h(Bartlett's)70 2710 y(mostly)j(cop)o(ying)h
(collector)h(strategy)h([5)o(];)930 2901 y(2)p eop
%%Page: 3 3
3 2 bop 28 161 a Ff(\017)21 b Fk(class)11 b Fg(TempHeap)f
Fk(is)h(useful)g(when)g(a)g(phase)h(of)f(a)f(program)g(allo)q(cates)h
(large)g(amoun)o(ts)e(of)i(temp)q(orary)f(ob)r(jects)j(whic)o(h)70
211 y(are)h(discarded)h(at)e(the)i(end)f(of)g(the)g(phase;)28
294 y Ff(\017)21 b Fk(class)15 b Fg(MarkAndSweep)d Fk(implemen)o(ts)h
(a)h(fully)g(conserv)n(ativ)o(e)h(mark-and-sw)o(eep)f(collector,)h(so)g
(there)h(is)f(no)g(need)h(to)70 343 y(supply)d(information)d(ab)q(out)j
(ob)r(jects)h(la)o(y)o(out.)i(It)e(do)q(es)f(not)g(p)q(erform)g
(compaction,)e(therefore)k(it)d(ma)o(y)f(b)q(e)j(sub)r(ject)70
393 y(to)f(fragmen)o(tation)f(and)i(it)f(ma)o(y)f(retain)i(more)f(ob)r
(jects)i(than)f(necessary)m(.)28 476 y Ff(\017)21 b Fk(class)14
b Fg(UncollectedHeap)d Fk(pro)o(vides)j(the)g(traditional)f(man)o(ual)e
(allo)q(cation)h(discipline.)28 568 y(The)j(abstract)h(class)g
Fg(CmmObject)d Fk(pro)o(vides)i(supp)q(ort)h(for)e(classes)j(of)d
(collected)i(ob)r(jects)g(whic)o(h)f(m)o(ust)f(b)q(e)h(traced)i(or)-34
617 y(sw)o(ept)d(b)o(y)g(a)g(collector.)28 667 y(In)20
b(the)h(rest)g(of)f(the)g(pap)q(er,)i(w)o(e)f(in)o(tro)q(duce)g(the)f
(idea)g(of)g(custom)f(ob)r(ject)i(allo)q(cation,)f(the)h(requiremen)o
(ts)f(for)g(a)-34 717 y(customisable)15 b(memory)e(manager.)23
b(After)16 b(recalling)f(the)i(general)f(principles)g(of)f(memory)f
(managem)o(en)o(t,)g(w)o(e)i(presen)o(t)-34 767 y(our)j(primary)e
(collection)i(algorithm,)e(then)j(discuss)g(the)g(CMM,)e(its)h
(implemen)o(tation)d(and)j(its)g(usage.)34 b(Finally)17
b(w)o(e)-34 817 y(illustrate)h(ho)o(w)g(to)g(em)o(ulate)f(di\013eren)o
(t)i(garbage)f(collector)h(st)o(yles)g(and)f(application)f(sp)q
(eci\014c)i(memory)d(managemen)o(t)-34 867 y(p)q(olicies.)-34
1004 y Fl(2)69 b(Custom)20 b(Ob)t(ject)h(Allo)r(cation)-34
1095 y Fk(Among)12 b(the)i(prop)q(erties)i(of)d(the)h(storage)h(for)e
(an)h(ob)r(ject)h(that)f(one)g(w)o(ould)f(lik)o(e)g(to)h(b)q(e)g(able)g
(to)g(con)o(trol)f(are:)28 1178 y Ff(\017)21 b Fk(lifetime)28
1261 y Ff(\017)g Fk(relo)q(catabilit)o(y)28 1344 y Ff(\017)g
Fk(tra)o(v)o(ersabilit)o(y)28 1427 y(F)m(or)15 b(instance,)g(if)f(an)h
(ob)r(ject)h(con)o(tains)f(some)f(implicit)e(p)q(oin)o(ters)k(to)f
(within)f(itself,)h(lik)o(e)f(a)g(branc)o(h)i(instruction)f(in)g(a)-34
1477 y(binary)c(co)q(de)i(segmen)o(t,)f(one)g(needs)h(to)f(sp)q(ecify)h
(that)f(the)g(ob)r(ject)h(cannot)g(b)q(e)f(relo)q(cated.)19
b(Supplying)11 b(information)e(ab)q(out)-34 1526 y(the)k(la)o(y)o(out)e
(of)h(an)h(ob)r(ject)g(ma)o(y)e(b)q(e)i(useful)f(to)h(impro)o(v)o(e)e
(the)i(accuracy)g(and)g(the)g(p)q(erformance)f(of)g(the)h(garbage)g
(collector.)-34 1576 y(F)m(or)h(instance,)h(an)f(arra)o(y)h(of)e(c)o
(haracters)k(need)e(not)g(b)q(e)g(tra)o(v)o(ersed)h(lo)q(oking)d(for)h
(p)q(oin)o(ters)h(to)g(other)g(ob)r(jects.)21 b(Sp)q(ecifying)-34
1626 y(the)14 b(lifetime)d(of)h(an)h(ob)r(ject)i(is)e(more)f
(di\016cult,)g(but)i(there)g(are)g(some)e(useful)i(simple)d(cases:)20
b(for)12 b(instance)j(asserting)e(that)-34 1676 y(an)g(ob)r(ject)i(is)f
(p)q(ermanen)o(t)g(ma)o(y)e(b)q(e)i(useful)g(to)g(store)h(it)f(in)f(an)
h(area)g(whic)o(h)g(is)g(visited)g(less)g(frequen)o(tly)g(b)o(y)g(the)h
(collector;)-34 1726 y(ob)r(jects)g(with)e(a)h(dynamic)e(exten)o(t)j
(can)f(b)q(e)h(allo)q(cated)e(on)h(the)g(stac)o(k.)28
1776 y(In)e(most)f(garbage)h(collector)g(implemen)o(tatio)o(ns,)e(suc)o
(h)j(prop)q(erties)g(are)g(dictated)f(b)o(y)g(the)h(collector)f(design)
g(and)g(users)-34 1825 y(ha)o(v)o(e)j(no)g(con)o(trol)g(on)g(them:)20
b(if)14 b(the)i(collector)f(is)g(a)g(cop)o(ying)g(collector,)g(it)g
(will)f(not)h(handle)g(ob)r(jects)h(whic)o(h)g(cannot)f(b)q(e)-34
1875 y(mo)o(v)o(ed.)h(The)f(lifetime)c(of)j(dynamically)c(allo)q(cated)
k(ob)r(jects)h(is)f(unpredicatable)g(and)g(uncon)o(trollable.)28
1925 y(T)m(o)20 b(pro)o(vide)g(user)h(con)o(trol)f(o)o(v)o(er)g(these)i
(prop)q(erties)g(en)o(tails)e(adding)f(a)h(new)h(dimension)d(to)i
(garbage)g(collection:)-34 1975 y(customisation)13 b(of)h(ob)r(ject)h
(allo)q(cation,)e(applicable)h(to)g(individual)f(ob)r(jects)j(rather)f
(than)g(to)f(the)i(whole)e(collector)h(or)g(to)-34 2025
y(classes)j(of)e(ob)r(jects.)27 b(Customisation)15 b(requires)j(a)e
(collector)h(designed)g(to)g(b)q(e)g(op)q(en)g(and)f(to)h(delegate)g(p)
q(ortions)g(of)f(his)-34 2074 y(task)e(to)g(other)g(collectors.)28
2124 y(This)c(is)h(a)f(di\013eren)o(t)h(concept)h(from)d(the)i(mec)o
(hanisms)d(of)i(parametrisation)f(or)h(tuning)g(that)h(some)e
(collectors)i(pro)o(vide.)28 2174 y(F)m(or)18 b(instance)i(garbage)e
(collection)h(in)o(terv)o(en)o(tion)f(can)h(b)q(e)h(sometimes)d(a)o(v)o
(oided)h(in)g(AD)o(A)g([13)o(])h(b)o(y)f(sp)q(ecifying)h(an)-34
2224 y(upp)q(er)14 b(b)q(ound)g(for)f(the)h(space)g(needed)h(for)e
(data)g(of)g(a)g(certain)h(t)o(yp)q(e.)k(The)c(corresp)q(onding)g
(space)h(can)e(then)i(b)q(e)f(reserv)o(ed)-34 2274 y(globally)e(when)i
(the)h(de\014nition)e(is)h(elab)q(orated.)19 b(Subsequen)o(tly)m(,)14
b(when)h(lea)o(ving)e(the)h(program)f(unit)g(enclosing)h(the)h(t)o(yp)q
(e)-34 2323 y(de\014nition,)i(the)h(space)g(corresp)q(onding)g(to)f
(the)h(collection)f(ma)o(y)e(b)q(e)j(reco)o(v)o(ered)h(since)f(the)g
(con)o(tained)f(ob)r(jects)h(are)g(no)-34 2373 y(longer)13
b(accessible.)28 2423 y(An)f(in)o(teresting)g(form)e(of)h(tuning)g(is)g
(pro)o(vided)g(in)h(Lisp)f(Mac)o(hine)h(Lisp)f([18)o(])g(where)i(one)f
(can)f(de\014ne)i(areas)f(of)f(memory)-34 2473 y(and)j(designate)h
(whic)o(h)g(area)g(to)f(use)i(when)f(allo)q(cating)e(ob)r(jects.)21
b(Areas)16 b(are)f(primarily)d(used)j(to)g(giv)o(e)f(the)h(user)h(con)o
(trol)-34 2523 y(o)o(v)o(er)e(the)h(paging)e(b)q(eha)o(viour)h(of)g(a)g
(program.)j(One)e(area)g(could)f(b)q(e)h(selected)h(as)e(p)q(ermanen)o
(t,)g(so)g(that)g(it)g(w)o(ould)g(not)g(b)q(e)-34 2573
y(copied)f(at)g(eac)o(h)h(activ)n(ation)e(of)h(the)g(ephemeral)g
(collector.)18 b(Micro)q(co)q(de)c(supp)q(ort)g(w)o(as)g(presen)o(t)g
(in)f(the)h(Lisp)f(Mac)o(hine)g(so)-34 2622 y(that)j(eac)o(h)g(area)g
(could)g(p)q(oten)o(tially)f(ha)o(v)o(e)g(a)h(di\013eren)o(t)h(storage)
f(discipline,)g(but)g(apparen)o(tly)f(suc)o(h)i(feature)g(w)o(as)f(nev)
o(er)-34 2672 y(exploited.)28 2722 y(Information)e(ab)q(out)j(tra)o(v)o
(ersal)g(of)g(ob)r(jects)h(can)f(b)q(e)g(supplied)g(to)g(the)h(Bo)q
(ehm-W)m(eiser)e(collector)h(for)g(C)g([6)o(])f(in)h(the)-34
2772 y(form)9 b(of)i(a)g(region)g(parameter)g(to)h(the)g(allo)q(cation)
d(routine.)18 b(Region)10 b(iden)o(ti\014cation)h(is)g(used)i(to)e
(determine)g(ho)o(w)g(to)g(lo)q(cate)930 2901 y(3)p eop
%%Page: 4 4
4 3 bop -34 161 a Fk(p)q(oin)o(ters)13 b(within)e(ob)r(jects)j(during)e
(tra)o(v)o(ersal)g(b)o(y)h(the)g(collector.)k(The)c Fg(PTRFREE)e
Fk(region)h(for)g(instance)h(is)g(used)g(to)f(allo)q(cate)-34
211 y(ob)r(jects)j(whic)o(h)f(do)g(not)g(con)o(tain)g(p)q(oin)o(ters.)
19 b(Suc)o(h)c(regions)f(are)h(simply)d(skipp)q(ed)j(b)o(y)f(the)h
(collector.)k(Detailed)13 b(tra)o(v)o(ersal)-34 260 y(information)e
(for)i(eac)o(h)i(t)o(yp)q(e)f(of)f(ob)r(ject)i(is)f(instead)g(required)
h(in)e(Bartlett's)i(mostly-cop)o(ying)c(collector)j([5].)28
310 y(In)e(all)e(these)j(examples)e(ho)o(w)o(ev)o(er)h(the)g(collector)
g(implemen)o(ts)d(a)i(\014xed)i(p)q(olicy)m(,)d(and)h(no)h(alternativ)o
(e)f(is)h(con)o(templated.)-34 360 y(The)g(collector)g(routines)g(at)g
(most)e(tak)o(e)i(in)o(to)f(accoun)o(t)h(the)h(area)f(where)g(an)g(ob)r
(ject)g(resides)i(b)q(esides)f(its)e(t)o(yp)q(e)i(and)e(la)o(y)o(out.)
28 410 y(The)k(CMM)f(allo)o(ws)f(users)i(to)f(customise)g(ob)r(ject)h
(allo)q(cation)e(b)o(y)h(sp)q(ecifying)g(individually)d(for)j(eac)o(h)h
(ob)r(ject)g(created)-34 460 y(whic)o(h)d(p)q(olicy)f(to)h(adopt)f(for)
h(its)g(storage.)18 b(The)12 b(CMM)g(admits)e(the)j(presence)i(of)c
(sev)o(eral)h(collectors,)h(eac)o(h)f(one)g(in)g(c)o(harge)-34
510 y(of)k(its)i(o)o(wn)f(heap,)h(whic)o(h)f(co)q(ordinate)g(with)g
(eac)o(h)h(other)g(for)f(prop)q(er)h(memory)d(managemen)o(t.)26
b(The)18 b(heap)f(where)i(an)-34 559 y(ob)r(ject)14 b(resides)g
(determines)f(the)h(p)q(olicy)e(used)i(for)f(the)h(ob)r(ject,)f(but)g
(to)g(ac)o(hiev)o(e)g(co)q(ordination)g(it)f(is)h(not)g(enough)g(for)g
(the)-34 609 y(pro)q(cedures)i(of)e(the)h(collector)g(to)f
(discriminate)f(on)h(the)h(heap)g(of)f(residence,)i(they)f(m)o(ust)e
(also)h(tak)o(e)g(in)o(to)g(accoun)o(t)h(whic)o(h)-34
659 y(heap)f(is)h(curren)o(tly)g(sub)r(ject)h(to)e(collection.)18
b(This)13 b(t)o(w)o(o)g(dimensional)e(dep)q(endency)16
b(is)d(an)g(original)e(feature)k(of)d(the)i(CMM)-34 709
y(and)f(it)h(will)e(discussed)k(later.)28 759 y(CMM)i(users)i(can)e
(select)h(among)d(a)i(few)g(prede\014ned)i(memory)c(managemen)o(t)f
(disciplines,)k(de\014ne)g(their)f(o)o(wn,)h(or)-34 808
y(customise)13 b(those)i(pro)o(vided)f(in)f(the)i(framew)o(ork)d
(exploiting)h(the)h(mec)o(hanisms)e(of)h(inheritance)i(and)f(sp)q
(ecialization.)28 858 y(F)m(or)g(instance)g(it)g(is)g(conceiv)n(able)f
(a)h(situation)f(lik)o(e)g(in)h(the)g(follo)o(wing)e(\014gure,)i(where)
h(three)g(di\013eren)o(t)g(memory)c(man-)-34 908 y(agemen)o(t)16
b(p)q(olicies)g(are)i(a)o(v)n(ailable)c(or)j(ev)o(en)h(used)f(together)
h(in)f(the)g(same)f(application:)23 b(a)16 b(traditional)g
(stop-and-cop)o(y)-34 958 y(collector,)d(a)g(sp)q(ecialised)h(stac)o(k)
g(allo)q(cator)e(for)h(p)q(ortions)h(of)f(the)h(algorithm)c(with)j(con)
o(trolled)h(b)q(eha)o(viour)f(and)g(a)g(genera-)-34 1008
y(tional)f(collector)j(for)e(real-time)f(tasks)j(suc)o(h)f(as)g(user)h
(in)o(terfaces.)238 1587 y @beginspecial 0 @llx 0 @lly
337 @urx 126 @ury 3370 @rwi @setspecial
%%BeginDocument: xfig/policies.eps
/$F2psDict 6400 dict def 
$F2psDict begin
$F2psDict /mtrx matrix put
/l {lineto} bind def
/m {moveto} bind def
/s {stroke} bind def
/n {newpath} bind def
/gs {gsave} bind def
/gr {grestore} bind def
/clp {closepath} bind def
/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul setrgbcolor} bind def
/col-1 {} def
/col0 {0 0 0 setrgbcolor} bind def
/col1 {0 0 1 setrgbcolor} bind def
/col2 {0 1 0 setrgbcolor} bind def
/col3 {0 1 1 setrgbcolor} bind def
/col4 {1 0 0 setrgbcolor} bind def
/col5 {1 0 1 setrgbcolor} bind def
/col6 {1 1 0 setrgbcolor} bind def
/col7 {1 1 1 setrgbcolor} bind def
	end
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def

$F2psBegin
0 setlinecap 0 setlinejoin
-36 4 translate
0.0 126.0 translate 0.900 -0.900 scale
0.500 setlinewidth
% Polyline
n 139 144 m 139 24 l  39 24 l  39 144 l 
 clp gs col-1 s gr
% Polyline
n 84 134 m 49 134 l  49 54 l  84 54 l 
 clp gs 0.60 setgray fill gr
gs col-1 s gr
% Polyline
n 129 134 m 94 134 l  94 54 l  129 54 l 
 clp gs 0.60 setgray fill gr
gs col-1 s gr
% Polyline
n 259 144 m 259 24 l  159 24 l  159 144 l 
 clp gs col-1 s gr
% Polyline
n 324 134 m 289 134 l  289 54 l  324 54 l 
 clp gs 0.60 setgray fill gr
gs col-1 s gr
% Polyline
n 364 134 m 329 134 l  329 54 l  364 54 l 
 clp gs 0.60 setgray fill gr
gs col-1 s gr
% Polyline
n 404 134 m 369 134 l  369 54 l  404 54 l 
 clp gs 0.60 setgray fill gr
gs col-1 s gr
% Polyline
n 204 134 m 169 134 l  169 34 l  204 34 l 
 clp gs 0.60 setgray fill gr
gs col-1 s gr
% Polyline
n 249 94 m 249 84 l  219 84 l  219 94 l 
 clp gs col-1 s gr
% Polyline
n 234 89 m 204 89 l gs col-1 s gr
n 212.000 91.000 m 204.000 89.000 l 212.000 87.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 414 144 m 414 24 l  279 24 l  279 144 l 
 clp gs col-1 s gr
% Polyline
n 84 79 m 84 59 l  49 59 l  49 79 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
% Polyline
n 79 104 m 79 104 l  79 104 l  79 104 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
% Polyline
n 84 99 m 84 89 l  49 89 l  49 99 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
% Polyline
n 84 129 m 84 109 l  49 109 l  49 129 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
% Polyline
n 324 134 m 324 64 l  289 64 l  289 134 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
% Polyline
n 364 94 m 364 79 l  329 79 l  329 94 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
% Polyline
n 364 134 m 364 99 l  329 99 l  329 134 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
% Polyline
n 404 84 m 404 79 l  369 79 l  369 84 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
% Polyline
n 404 109 m 404 99 l  369 99 l  369 109 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
% Polyline
n 404 124 m 404 119 l  369 119 l  369 124 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
% Polyline
n 204 94 m 169 94 l  169 34 l  204 34 l 
 clp gs 0.90 setgray fill gr
gs col-1 s gr
/Times-Roman findfont 9.00 scalefont setfont
54 49 m 
gs 1 -1 scale (From) col-1 show gr
/Times-Roman findfont 9.00 scalefont setfont
104 49 m 
gs 1 -1 scale (To) col-1 show gr
/Times-Roman findfont 9.00 scalefont setfont
59 14 m 
gs 1 -1 scale (Stop  & Copy) col-1 show gr
/Times-Roman findfont 9.00 scalefont setfont
229 79 m 
gs 1 -1 scale (top) col-1 show gr
/Times-Roman findfont 9.00 scalefont setfont
294 44 m 
gs 1 -1 scale (Gen1) col-1 show gr
/Times-Roman findfont 9.00 scalefont setfont
334 44 m 
gs 1 -1 scale (Gen2) col-1 show gr
/Times-Roman findfont 9.00 scalefont setfont
374 44 m 
gs 1 -1 scale (Gen3) col-1 show gr
/Times-Roman findfont 9.00 scalefont setfont
189 14 m 
gs 1 -1 scale (Stack) col-1 show gr
/Times-Roman findfont 9.00 scalefont setfont
319 14 m 
gs 1 -1 scale (Generational) col-1 show gr
$F2psEnd
%%EndDocument
 @endspecial 28 1661 a(The)f(mec)o(hanism)e(to)i(implemen)o(t)d(these)
16 b(alternativ)o(e)e(p)q(olicies)f(is)h(the)h Fj(he)n(ap)f
Fk(abstraction)h(whic)o(h)f(w)o(e)g(dev)o(elop)g(in)f(this)-34
1711 y(pap)q(er.)24 b(Sp)q(eci\014c)17 b(algorithms)d(are)i(used)h(and)
e(particular)h(data)f(structures)k(are)d(main)o(tained)d(b)o(y)j(eac)o
(h)g(heap)g(to)g(ensure)-34 1761 y(its)f(prop)q(er)h(b)q(eha)o(viour.)
23 b(A)15 b(critical)g(question)h(is)f(what)g(to)h(do)f(with)g(p)q(oin)
o(ters)h(whic)o(h)f(cross)i(the)f(b)q(oundaries)g(of)e(heaps.)-34
1810 y(If)g(no)h(suc)o(h)g(p)q(oin)o(ters)h(are)f(allo)o(w)o(ed,)e
(then)i(a)g(heap)g(need)h(only)e(b)q(e)h(concerned)i(with)d(ob)r(jects)
i(it)f(has)g(allo)q(cated)f(and)h(o)o(v)o(er)-34 1860
y(whic)o(h)g(it)f(has)h(some)g(con)o(trol.)21 b(W)m(e)14
b(considered)j(this)e(solution)f(to)q(o)h(restrictiv)o(e,)h(since)g(it)
f(w)o(ould)f(not)h(allo)o(w)e(p)q(ortions)i(of)-34 1910
y(applications)f(built)g(separately)i(b)o(y)f(di\013eren)o(t)h(p)q
(eople)f(to)g(exc)o(hange)h(data)f(freely)m(.)21 b(W)m(e)15
b(to)q(ok)g(therefore)h(sp)q(ecial)g(care)g(to)-34 1960
y(design)c(the)g(mec)o(hanism)d(of)i(heaps)i(to)e(ensure)j(that)d
(di\013eren)o(t)i(heaps)g(can)e(co)q(exist)i(and)e(data)h(of)f
(di\013eren)o(t)i(sources)g(can)f(b)q(e)-34 2010 y(mixed.)k(The)f
(amoun)o(t)d(of)h(co)q(ordination)g(necessary)j(to)e(ac)o(hiev)o(e)g
(this)g(goal)f(consists)i(of)e(a)g(tra)o(v)o(ersal)h(function)g(that)g
(eac)o(h)-34 2059 y(class)h(of)g(collectable)g(ob)r(jects)h(m)o(ust)e
(pro)o(vide)h(and)g(a)f(sca)o(v)o(enging)h(function)g(for)g(eac)o(h)g
(heap.)22 b(T)m(o)14 b(ac)o(hiev)o(e)h(co)q(ordination)-34
2109 y(in)d(a)h(simple)e(and)i(e\013ectiv)o(e)h(w)o(a)o(y)m(,)d(w)o(e)i
(exploit)f(the)i(ob)r(ject)f(orien)o(ted)h(features)g(of)e(C++.)18
b(In)13 b(practice,)g(all)f(the)h(op)q(erations)-34 2159
y(of)g(the)h(collector)g(are)f(p)q(erformed)h(through)f(mem)o(b)q(er)f
(functions)i(of)f(the)h(class)g(of)f(eac)o(h)h(ob)r(ject.)k(Ho)o(w)o
(ev)o(er,)c(the)g(action)f(of)-34 2209 y(the)g(collector)g(on)f(an)h
(ob)r(ject)g(ma)o(y)e(also)h(dep)q(end)i(on)e(the)h(heap)g(where)h(the)
f(collection)f(started,)i(not)e(just)h(on)g(the)g(heap)g(to)-34
2259 y(whic)o(h)f(the)h(ob)r(ject)g(b)q(elongs.)18 b(F)m(or)12
b(instance)h(if)f(the)g(collection)g(starts)i(in)e(the)h(Stop&Cop)o(y)f
(heap,)g(it)g(applies)h(its)f(metho)q(ds)-34 2309 y(to)17
b(mark)e(and)i(tra)o(v)o(erse)h(the)g(ob)r(ject)f(in)g(that)g(heap,)g
(but)h(if)e(a)g(p)q(oin)o(ter)i(leads)f(in)o(to)f(a)h(Stac)o(k)g(heap,)
g(those)h(ob)r(jects)g(are)-34 2358 y(unobtrusiv)o(ely)d(tra)o(v)o
(ersed)j(without)d(mo)q(difying)e(them.)23 b(Only)15
b(if)g(suc)o(h)i(tra)o(v)o(ersal)f(leads)g(bac)o(k)f(in)o(to)g(the)i
(original)d(heap,)-34 2408 y(will)e(the)j(full)d(collector)i(op)q
(eration)g(resume.)-34 2545 y Fl(3)69 b(Design)22 b(Issues)-34
2636 y Fk(In)14 b(designing)f(the)i(CMM)e(w)o(e)i(tried)f(to)g(ac)o
(hiev)o(e)g(the)g(follo)o(wing)d(goals:)28 2727 y Ff(\017)21
b Fj(p)n(ortability)p Fk(:)g(the)16 b(CMM)g(is)g(simply)e(a)h(library)h
(of)f(C)h(pro)q(cedures)i(and)e(C++)g(classes,)h(whic)o(h)f(can)g(b)q
(e)h(used)g(with)70 2777 y(an)o(y)c(C++)h(compiler.)j(Alternativ)o(e)d
(solutions)f(rely)h(on)g(c)o(hanges)h(to)e(the)i(underlying)e(language)
g(or)h(compiler.)930 2901 y(4)p eop
%%Page: 5 5
5 4 bop 28 161 a Ff(\017)21 b Fj(c)n(o)n(existenc)n(e)p
Fk(:)16 b(co)q(de)11 b(and)f(ob)r(jects)i(built)d(with)h(the)h(CMM)g
(can)f(b)q(e)h(exc)o(hanged)g(with)f(traditional)f(co)q(de)i(and)f
(libraries.)70 211 y(No)k(restrictions)i(exist)g(on)e(whether)j(a)d
(collected)i(ob)r(ject)f(can)h(p)q(oin)o(t)e(to)h(a)f(non)h(collected)h
(ob)r(ject)f(and)g(vicev)o(ersa.)70 260 y(W)m(e)h(w)o(an)o(ted)g(to)g
(b)q(e)h(able)f(to)h(pass)f(collected)i(ob)r(jects)f(to)f(programs)f
(una)o(w)o(are)i(of)f(garbage)g(collection,)g(allo)o(wing)70
310 y(them)d(to)g(store)i(suc)o(h)g(ob)r(jects)g(in)e(data)h
(structures,)i(without)d(sp)q(ecial)h(burden)h(on)f(the)g(programmer)e
(or)i(risk)f(that)70 360 y(the)h(ob)r(ject)g(w)o(ould)e(b)q(e)j
(garbage)e(collected.)18 b(Alternativ)o(e)c(solutions)f(require)h(the)g
(programmer)e(to)h(put)g(an)h(ob)r(ject)70 410 y(in)f(an)h(\\escap)q(e)
h(list")e(b)q(efore)i(passing)e(it)h(to)g(an)f(external)i(pro)q
(cedure.)28 493 y Ff(\017)21 b Fj(algorithm)c(sp)n(e)n(ci\014c)h
(customisation)p Fk(:)25 b(the)18 b(allo)q(cation)e(p)q(olicy)h(can)g
(b)q(e)h(customised)f(to)g(the)h(particular)f(needs)i(of)70
543 y(an)c(algorithm.)22 b(This)16 b(is)g(di\013eren)o(t)h(from)e
(other)i(solutions,)e(where)j(the)e(allo)q(cation)f(p)q(olicy)g(is)h
(asso)q(ciated)h(to)f(the)70 593 y(t)o(yp)q(e)d(of)g(an)g(ob)r(ject)h
([11)o(].)j(F)m(or)c(the)h(purp)q(ose)g(of)f(our)g(applications,)f(it)g
(is)h(necessary)j(to)d(allo)q(cate)f(the)i(same)e(t)o(yp)q(e)i(of)70
642 y(ob)r(ject)i(sometimes)e(with)h(one)h(p)q(olicy)f(and)g(sometimes)
f(with)h(another.)24 b(F)m(or)15 b(example,)f(in)i(P)o(oSSo)f(there)i
(is)e(only)70 692 y(one)d(class)i(of)e(p)q(olynomial)o(s,)e(but)j
(sometimes)e(a)h(p)q(olynomial)e(is)i(allo)q(cated)g(in)h(a)f(sp)q
(ecial)h(heap)g(whic)o(h)f(can)h(b)q(e)h(freed)70 742
y(quic)o(kly)d(once)j(a)e(certain)h(p)q(ortion)f(of)g(the)i
(simpli\014cation)c(algorithm)g(is)i(complete;)g(in)g(other)h(cases)h
(the)g(lifetime)c(of)70 792 y(the)k(p)q(olynomial)c(cannot)15
b(b)q(e)f(predicted,)h(so)f(it)f(m)o(ust)g(b)q(e)i(allo)q(cated)e(in)h
(the)g(general)g(heap.)28 875 y Ff(\017)21 b Fj(multiple)10
b(lo)n(gic)n(al)g(he)n(aps)p Fk(:)16 b(at)9 b(least)h(t)o(w)o(o)f
(heaps)h(are)g(necessary)m(,)i(one)d(for)h(collectable)f(ob)r(jects)i
(and)e(one)h(for)f(traditional)70 925 y(ob)r(jects.)19
b(Ho)o(w)o(ev)o(er)c(t)o(w)o(o)e(is)h(not)g(enough:)k(for)c(instance)h
(collectable)f(ob)r(jects)h(con)o(taining)e(data)h(whic)o(h)g(cannot)g
(b)q(e)70 974 y(relo)q(cated)k(for)g(some)f(reasons)h(m)o(ust)f(b)q(e)h
(handled)g(di\013eren)o(tly)g(from)e(other)j(ob)r(jects)g(whic)o(h)e
(are)h(copied)g(b)o(y)g(the)70 1024 y(collector.)g(F)m(or)13
b(this)h(reason)h(the)f(CMM)g(pro)o(vides)g(m)o(ultiple)e(logical)g
(heaps.)28 1107 y Ff(\017)21 b Fj(usability)p Fk(:)d(only)c(a)h(minim)o
(al)c(burden)k(is)g(placed)f(on)h(the)g(programmer)d(who)i(w)o(an)o(ts)
h(to)f(use)i(the)f(collector.)20 b(When)70 1157 y(collectable)13
b(ob)r(jects)h(are)g(required)g(the)g(programmer)d(needs)k(to)e
(de\014ne)i(their)e(class)h(as)g(inheriting)e(from)g(the)i(base)70
1207 y(class)g Fg(CmmObject)e Fk(and)i(supply)f(a)h(metho)q(d)f(for)h
(tra)o(v)o(ersing)g(them,)e(a)i(task)g(whic)o(h)g(could)f(b)q(e)i
(automated.)28 1290 y Ff(\017)21 b Fj(sep)n(ar)n(ation)14
b(of)h(c)n(onc)n(erns)p Fk(:)j(memory)11 b(managemen)o(t)h(co)q(de)i
(needs)h(not)f(to)f(b)q(e)i(included)e(within)g(algorithms,)e(and)j(it)
70 1340 y(is)f(p)q(ossible)h(to)g(c)o(hange)g(the)h(memory)c(p)q(olicy)
i(just)i(b)o(y)e(selecting)i(whic)o(h)f(heap)g(is)f(emplo)o(y)o(ed)g(b)
o(y)g(the)i(algorithm.)28 1423 y Ff(\017)21 b Fj(e\016ciency)p
Fk(:)h(the)17 b(implemen)o(tation)c(is)j(e\016cien)o(t)h(enough)f(to)g
(b)q(e)h(as)f(go)q(o)q(d)g(as)g(and)g(sometimes)f(b)q(etter)i(than)g
(hand)70 1473 y(tuned)d(allo)q(cation.)28 1564 y(The)h(CMM)g(allo)o(ws)
e(customisation)g(of)h(the)i(collector)f(and)f(pro)o(vides)h(a)f(few)h
(pre-built)g(v)n(arian)o(ts.)k(One)d(could)e(argue)-34
1614 y(whether)e(a)f(single)f(general)h(strategy)h(could)f(\014t)g(all)
f(the)h(needs.)18 b(F)m(or)11 b(instance)h(a)e(generational)h(garbage)f
(collector)i(ensures)-34 1664 y(that)k(memory)d(is)j(reclaimed)f(quic)o
(kly)m(.)22 b(Ho)o(w)o(ev)o(er)17 b(not)e(ev)o(en)i(a)e(generational)h
(garbage)f(collection)h(is)f(go)q(o)q(d)h(enough)g(for)-34
1713 y(applications)f(lik)o(e)h(P)o(oSSo)h(where)g(one)g(m)o(ust)f
(prev)o(en)o(t)h(or)g(dela)o(y)f(garbage)h(collection)f(as)g(m)o(uc)o
(h)g(as)h(p)q(ossible,)g(not)f(just)-34 1763 y(mak)o(e)11
b(its)i(duration)g(shorter.)19 b(F)m(or)12 b(the)i(v)n(ast)e(ma)r
(jorit)o(y)f(of)h(applications)g(a)h(general)g(purp)q(ose)h(strategy)g
(is)f(adequate,)g(and)-34 1813 y(the)i(CMM)g(pro)o(vides)g(a)g(go)q(o)q
(d)g(one)g(b)o(y)f(default.)21 b(But)16 b(for)e(researc)o(h)j(or)e
(applications)f(that)h(need)h(to)f(push)g(the)h(limits)c(of)-34
1863 y(tec)o(hnology)m(,)g(the)j(CMM)f(pro)o(vides)g(a)f(solution)h
(with)f(limited)f(burden)j(on)e(the)i(user.)-34 2000
y Fl(4)69 b(Dynamic)19 b(Memory)i(Managemen)n(t:)29 b(Concepts)22
b(and)i(T)-6 b(ermi)o(nology)-34 2091 y Fk(A)14 b(garbage)f(collection)
h(mec)o(hanism)d(basically)i(consists)i(of)e(t)o(w)o(o)h(parts)g([20)o
(]:)16 2182 y(1.)21 b(distinguishing)12 b(the)j Fj(live)f(obje)n(cts)g
Fk(from)e(the)i(garbage)g(in)f(some)g(w)o(a)o(y)m(,)g(or)h
Fj(garb)n(age)h(dete)n(ction)p Fk(;)16 2265 y(2.)21 b(reclaiming)11
b(the)k(garbage)e(ob)r(jects')i(storage,)f(so)g(that)g(the)g(running)g
(program)e(can)i(reuse)i(it.)28 2357 y(The)d(formal)c
Fj(criterion)i Fk(to)i(iden)o(tify)e Fj(live)h Fk(ob)r(jects)h(is)f
(expressed)i(in)e(terms)g(of)g(a)g Fj(r)n(o)n(ot)g(set)g
Fk(and)g Fj(r)n(e)n(achability)g Fk(from)e(these)-34
2406 y(ro)q(ots.)24 b(The)16 b Fj(r)n(o)n(ot)g(set)f
Fk(consists)i(of)e(the)h(global)f(and)g(lo)q(cal)g(v)n(ariables,)g(and)
g(an)o(y)h(registers)h(used)f(b)o(y)g(activ)o(e)g(pro)q(cedures.)-34
2456 y(Heap)k(ob)r(jects)h(directly)f(reac)o(hable)g(from)e(an)o(y)h
(of)g(these)i(v)n(ariables)e(can)h(p)q(oten)o(tially)f(b)q(e)h
(accessed)i(b)o(y)d(the)i(running)-34 2506 y(program,)14
b(so)i(they)g(are)g Fj(live)f Fk(ob)r(jects)i(whic)o(h)e(m)o(ust)g(b)q
(e)h(preserv)o(ed.)26 b(In)15 b(addition,)g(since)h(the)h(program)d
(migh)o(t)f(tra)o(v)o(erse)-34 2556 y(p)q(oin)o(ters)h(from)d(these)k
(ob)r(jects)f(to)f(reac)o(h)i(other)e(ob)r(jects,)i(an)o(y)d(ob)r(ject)
i(reac)o(hable)g(from)e(a)h(liv)o(e)f(ob)r(ject)i(is)g(also)e(liv)o(e.)
17 b(Th)o(us)-34 2606 y(the)h Fj(live)f(set)g Fk(is)g(the)h(set)h(of)d
(ob)r(jects)j(in)e(some)f(w)o(a)o(y)h(reac)o(hable)h(from)d(the)j(ro)q
(ots.)29 b(An)o(y)17 b(ob)r(ject)h(not)f(in)g(the)h(liv)o(e)e(set)j(is)
-34 2656 y(garbage)13 b(and)h(can)g(b)q(e)h(safely)e(reclaimed.)28
2705 y(Dep)q(ending)e(on)g(the)h(kind)f(of)f(information)f(a)o(v)n
(ailable)g(during)h(the)i(tra)o(v)o(ersal)f(of)g(ob)r(jects)h(from)e
(the)h(ro)q(ot)h(set,)g(a)f(tracing)-34 2755 y(collector)j(can)g(b)q(e)
h Fj(c)n(onservative)p Fk(,)e Fj(typ)n(e-ac)n(cur)n(ate)h
Fk(or)g(b)q(oth.)930 2901 y(5)p eop
%%Page: 6 6
6 5 bop 28 161 a Fk(A)14 b Fj(c)n(onservative)h Fk(garbage)f(collector)
h(do)q(es)g(not)f(require)h(co)q(op)q(eration)g(from)d(the)j(compiler)e
(and)h(assumes)h(that)f(an)o(y-)-34 211 y(thing)e(that)g
Fj(might)g Fk(b)q(e)h(a)f(p)q(oin)o(ter)h(actually)e
Fj(is)h Fk(a)g(p)q(oin)o(ter.)18 b(In)12 b(this)g(case)i(an)e(in)o
(teger)h(\(or)f(an)o(y)g(other)h(v)n(alue\))f(is)g(assumed)g(to)-34
260 y(b)q(e)i(a)e(p)q(oin)o(ter)i(b)o(y)f(the)h(collector)f(if)f(it)h
(corresp)q(onds)i(to)e(an)g(address)i(inside)e(the)h(curren)o(t)g(heap)
g(range:)k(an)o(y)12 b(suc)o(h)i(v)n(alue)f(is)-34 310
y(called)e(an)g Fj(ambiguous)i(p)n(ointer)p Fk(.)k(A)12
b(ro)q(ot)f(con)o(taining)g(an)g(am)o(biguous)e(p)q(oin)o(ter)j(is)f
(called)g(an)g Fj(ambiguous)j(r)n(o)n(ot)p Fk(.)i(A)c(garbage)-34
360 y(collector)j(is)g Fj(typ)n(e-ac)n(cur)n(ate)g Fk(when)h(it)f(is)g
(able)g(to)g(distinguish)f(whic)o(h)h(v)n(alues)g(are)h(gen)o(uine)f(p)
q(oin)o(ters)h(to)f(ob)r(jects.)23 b(Some)-34 410 y(garbage)11
b(collectors)h(adopt)f(a)g(com)o(bination)d(of)j(these)i(t)o(w)o(o)d
(tec)o(hniques:)18 b(some)11 b(p)q(oin)o(ters)g(are)h(dealt)f(conserv)n
(ativ)o(ely)m(,)g(while)-34 460 y(others)k(are)f(treated)h(in)e(a)h(t)o
(yp)q(e)g(accurate)i(w)o(a)o(y)m(.)28 510 y(The)c(main)e(limitations)f
(of)i(a)h(purely)g(conserv)n(ativ)o(e)g(collector)g(are)g(memory)e
(fragmen)o(tation)f(in)j(applications)e(dealing)-34 559
y(with)k(ob)r(jects)h(of)e(sev)o(eral)i(sizes,)g(whic)o(h)f(arises)h
(from)d(the)j(inabilit)o(y)d(to)i(mo)o(v)o(e)e(ob)r(jects,)j(and)f(the)
h(risk)f(that)g(a)g(signi\014can)o(t)-34 609 y(amoun)o(t)c(of)h(memory)
e(migh)o(t)h(not)i(b)q(e)g(reclaimed)f(in)g(applications)g(with)h
(densely)g(p)q(opulated)g(address)h(spaces)h(of)d(strongly)-34
659 y(connected)k(ob)r(jects)h([19)o(].)28 709 y(The)f(alternativ)o(e)f
(approac)o(h)h(whic)o(h)f(is)h Fj(typ)n(e-ac)n(cur)n(ate)f
Fk(in)g(iden)o(tifying)f(ob)r(jects)j(faces)f(some)f(problems)f(with)h
(hidden)-34 759 y(p)q(oin)o(ters.)21 b(F)m(or)15 b(instance)h(in)e(C++)
h(the)h(lo)q(cation)e(on)g(the)i(stac)o(k)f(of)g(the)g(p)q(oin)o(ter)g
(to)g(the)g(ob)r(ject)h(itself,)e(denoted)i(b)o(y)f(the)-34
808 y(v)n(ariable)g Fg(this)p Fk(,)h(is)g(only)g(kno)o(wn)g(to)h(the)g
(compiler.)24 b(The)17 b(only)f(compiler-indep)q(enden)o(t)g(w)o(a)o(y)
g(to)g(catc)o(h)i(suc)o(h)f(p)q(oin)o(ters)-34 858 y(is)e(to)h(examine)
e(the)i(stac)o(k)g(conserv)n(ativ)o(ely)m(.)23 b(F)m(ailing)13
b(to)i(trace)i(hidden)f(p)q(oin)o(ters)g(ma)o(y)e(lead)h(to)g
Fj(dangling)i(p)n(ointers)f Fk(and)-34 908 y(pro)q(duce)f(serious)f
(consequences)j(for)d(the)g(in)o(tegrit)o(y)f(of)h(the)g(program.)28
958 y(Both)j(these)h(limitations)c(are)j(a)o(v)o(oided)f(in)h(the)g
(partially)e(conserv)n(ativ)o(e)j(approac)o(h)e(prop)q(osed)i(b)o(y)f
(Bartlett)g(for)g(his)-34 1008 y Fj(mostly)j(c)n(opying)h(garb)n(age)f
(c)n(ol)r(le)n(ctor)p Fk(.)34 b(W)m(e)20 b(c)o(hose)g(this)g(tec)o
(hnique)h(as)e(the)i(basis)e(for)h(dev)o(eloping)f(our)g(customisable)
-34 1057 y(collector.)-34 1192 y Fl(5)69 b(The)22 b(Default)g
(Collector)-34 1283 y Fk(The)15 b(CMM)h(relies)g(on)f(an)g(underlying)f
(general)i(mec)o(hanism)d(for)i(iden)o(tifying)f(ob)r(jects,)i(mo)o
(ving)c(them)j(and)g(reco)o(v)o(ering)-34 1333 y(memory)m(.)20
b(With)15 b(these)j(mec)o(hanisms)13 b(the)k Fj(default)f(c)n(ol)r(le)n
(ctor)f Fk(of)g(the)h(CMM)g(is)g(built)f(exploiting)f(Bartlett's)j(tec)
o(hnique)-34 1383 y([4)o(].)g(The)e(di\013erence)g(and)f(the)g(deriv)n
(ation)f(of)g(our)g(tec)o(hnique)i(from)d(Bartlett's)i(original)e(are)i
(discussed)h(in)f([1)o(].)j(Here)e(w)o(e)-34 1432 y(presen)o(t)g(our)f
(implemen)o(tation.)28 1482 y(A)d(mostly-cop)o(ying)e(garbage)i
(collector)h(p)q(erforms)e(compacting)g(collection)h(in)g(the)h
(presence)h(of)e(am)o(biguous)e(p)q(oin)o(ters)-34 1532
y(in)i(the)g(ro)q(ot)h(set.)18 b(The)11 b(tec)o(hnique)h(is)g(an)f(ev)o
(olution)f(of)g(the)i(classical)f(stop-and-cop)o(y)g(collector)h(whic)o
(h)f(com)o(bines)f(cop)o(ying)-34 1582 y(and)j Fj(c)n(onservative)h
Fk(collection.)28 1632 y(The)j(heap)g(used)g(b)o(y)g(the)g(mostly-cop)o
(ying)d(collector)j(consists)g(of)f(a)h(n)o(um)o(b)q(er)f(of)f(equal)i
(size)g(pages,)g(eac)o(h)g(with)g(its)-34 1681 y(o)o(wn)d
Fj(sp)n(ac)n(e-identi\014er)i Fk(\(either)g Fj(F)m(r)n(om)e
Fk(or)h Fj(T)m(o)g Fk(in)g(the)g(simplest)f(non)h(generational)g(v)o
(ersion\).)22 b(The)15 b Fj(F)m(r)n(omSp)n(ac)n(e)h Fk(consists)-34
1731 y(of)c(all)g(pages)i(whose)f(iden)o(ti\014er)h(is)f
Fj(F)m(r)n(om)p Fk(,)f(and)h(similarly)d(for)j Fj(T)m(oSp)n(ac)n(e)p
Fk(.)18 b(The)c(collector)f(conserv)n(ativ)o(ely)g(scans)h(the)g(stac)o
(k)-34 1781 y(and)h(global)f(v)n(ariables)g(lo)q(oking)g(for)h(p)q
(oten)o(tial)g(p)q(oin)o(ters.)23 b(Ob)r(jects)17 b(referenced)h(b)o(y)
d(am)o(biguous)e(ro)q(ots)j(are)f(not)h(copied,)-34 1831
y(while)f(other)g(liv)o(e)g(ob)r(jects)h(are)g(copied.)22
b(If)15 b(an)g(ob)r(ject)h(is)g(referenced)h(from)d(a)h(ro)q(ot,)g(it)g
(m)o(ust)f(b)q(e)i(sca)o(v)o(enged)g(to)f(surviv)o(e)-34
1881 y(collection.)84 2777 y @beginspecial 0 @llx 0 @lly
411 @urx 196 @ury 4110 @rwi @setspecial
%%BeginDocument: xfig/bartlett.eps
/$F2psDict 32 dict def 
$F2psDict begin
	$F2psDict /mtrx matrix put

	end
	/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
	/$F2psEnd {$F2psEnteredState restore end} def
	%%EndProlog

$F2psBegin
1 setlinecap 1 setlinejoin
-20 51 translate
0.000000 196.000000 translate 0.900 -0.900 scale
1.000 setlinewidth
	[4.000000] 0 setdash
% Polyline
newpath 124 195 moveto 69 195 lineto 69 144 lineto 124 144 lineto closepath gsave  0.900 setgray fill grestore  stroke
	[] 0 setdash
	[4.000000] 0 setdash
% Polyline
newpath 124 139 moveto 69 139 lineto 69 79 lineto 124 79 lineto closepath gsave  0.900 setgray fill grestore  stroke
	[] 0 setdash
% Polyline
newpath 269 195 moveto 214 195 lineto 214 144 lineto 269 144 lineto closepath  stroke
	[4.000000] 0 setdash
% Polyline
newpath 418 195 moveto 364 195 lineto 364 144 lineto 418 144 lineto closepath gsave  0.900 setgray fill grestore  stroke
	[] 0 setdash
% Polyline
newpath 99 152 moveto 99 159 lineto gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 104 154 moveto 112 168 lineto  stroke
newpath 109.767 160.062 moveto 112.000 168.000 lineto 106.294 162.046 lineto stroke
% Polyline
newpath 94 154 moveto 86 169 lineto  stroke
newpath 91.529 162.882 moveto 86.000 169.000 lineto 88.000 161.000 lineto stroke
% Polyline
newpath 92 175 moveto 92 169 lineto 77 169 lineto 77 175 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 105 174 moveto 105 168 lineto 118 168 lineto 118 174 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 259 159 moveto 259 152 lineto 229 152 lineto 229 159 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 244 152 moveto 244 159 lineto gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 249 154 moveto 257 168 lineto  stroke
newpath 254.767 160.062 moveto 257.000 168.000 lineto 251.294 162.046 lineto stroke
% Polyline
newpath 239 154 moveto 231 169 lineto  stroke
newpath 236.529 162.882 moveto 231.000 169.000 lineto 233.000 161.000 lineto stroke
% Polyline
newpath 237 175 moveto 237 169 lineto 222 169 lineto 222 175 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 250 174 moveto 250 168 lineto 263 168 lineto 263 174 lineto closepath gsave  1.000 setgray fill grestore  stroke
	[4.000000] 0 setdash
% Polyline
newpath 408 159 moveto 408 152 lineto 378 152 lineto 378 159 lineto closepath gsave  1.000 setgray fill grestore  stroke
	[] 0 setdash
	[4.000000] 0 setdash
% Polyline
newpath 393 152 moveto 393 159 lineto gsave  1.000 setgray fill grestore  stroke
	[] 0 setdash
% Polyline
newpath 345 102 moveto 345 95 lineto 319 95 lineto 319 102 lineto closepath  stroke
% Polyline
newpath 114 159 moveto 114 152 lineto 84 152 lineto 84 159 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 345 124 moveto 345 117 lineto 319 117 lineto 319 124 lineto closepath  stroke
% Polyline
newpath 345 113 moveto 345 106 lineto 319 106 lineto 319 113 lineto closepath  stroke
/Times-Roman findfont 10.000 scalefont setfont
329 225 moveto 
1 -1 scale
(After Compaction) gsave  0.000 rotate show grestore 1 -1 scale
% Polyline
newpath 196 135 moveto 196 128 lineto 170 128 lineto 170 135 lineto closepath  stroke
% Polyline
newpath 196 124 moveto 196 117 lineto 170 117 lineto 170 124 lineto closepath  stroke
% Polyline
newpath 196 113 moveto 196 106 lineto 170 106 lineto 170 113 lineto closepath  stroke
% Polyline
newpath 52 102 moveto 52 95 lineto 26 95 lineto 26 102 lineto closepath  stroke
% Polyline
newpath 52 135 moveto 52 128 lineto 26 128 lineto 26 135 lineto closepath  stroke
% Polyline
newpath 52 124 moveto 52 117 lineto 26 117 lineto 26 124 lineto closepath  stroke
% Polyline
newpath 52 113 moveto 52 106 lineto 26 106 lineto 26 113 lineto closepath  stroke
% Polyline
newpath 89 99 moveto 84 113 lineto  stroke
newpath 88.574 106.139 moveto 84.000 113.000 lineto 84.807 104.793 lineto stroke
% Polyline
newpath 104 99 moveto 113 113 lineto  stroke
newpath 110.356 105.189 moveto 113.000 113.000 lineto 106.992 107.352 lineto stroke
% Polyline
newpath 93 118 moveto 78 118 lineto 78 113 lineto 93 113 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 106 118 moveto 117 118 lineto 117 113 lineto 106 113 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 114 102 moveto 84 102 lineto 84 95 lineto 114 95 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 345 135 moveto 345 128 lineto 319 128 lineto 319 135 lineto closepath  stroke
/Times-Roman findfont 10.000 scalefont setfont
41 223 moveto 
1 -1 scale
(Before Collection) gsave  0.000 rotate show grestore 1 -1 scale
% Polyline
newpath 196 102 moveto 196 95 lineto 170 95 lineto 170 102 lineto closepath  stroke
% Polyline
newpath 237 118 moveto 222 118 lineto 222 113 lineto 237 113 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 250 118 moveto 261 118 lineto 261 113 lineto 250 113 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 258 102 moveto 228 102 lineto 228 95 lineto 258 95 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 243 95 moveto 243 102 lineto  stroke
% Polyline
newpath 382 99 moveto 377 113 lineto  stroke
newpath 381.574 106.139 moveto 377.000 113.000 lineto 377.807 104.793 lineto stroke
% Polyline
newpath 99 95 moveto 99 102 lineto  stroke
% Polyline
newpath 386 118 moveto 371 118 lineto 371 113 lineto 386 113 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 399 118 moveto 410 118 lineto 410 113 lineto 399 113 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 407 102 moveto 377 102 lineto 377 95 lineto 407 95 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 392 95 moveto 392 102 lineto  stroke
newpath 430.963 99.181 moveto 432.000 91.000 lineto 434.935 98.706 lineto stroke
newpath 409.667 93.667 22.492 96.810 -6.810 arcn
stroke
% Polyline
newpath 286 274 moveto 286 248 lineto 251 248 lineto 251 274 lineto closepath  stroke
% Polyline
newpath 343 99 moveto 377 99 lineto  stroke
newpath 369.000 97.000 moveto 377.000 99.000 lineto 369.000 101.000 lineto stroke
% Polyline
newpath 342 132 moveto 369 116 lineto  stroke
newpath 361.098 118.358 moveto 369.000 116.000 lineto 363.137 121.799 lineto stroke
% Polyline
newpath 457 90 moveto 457 90 lineto 457 90 lineto 457 90 lineto closepath  stroke
% Polyline
newpath 194 99 moveto 228 99 lineto  stroke
newpath 220.000 97.000 moveto 228.000 99.000 lineto 220.000 101.000 lineto stroke
% Polyline
newpath 193 132 moveto 221 116 lineto  stroke
newpath 213.062 118.233 moveto 221.000 116.000 lineto 215.046 121.706 lineto stroke
% Polyline
newpath 256 116 moveto 251 151 lineto  stroke
newpath 254.111 143.363 moveto 251.000 151.000 lineto 250.151 142.798 lineto stroke
% Polyline
newpath 49 132 moveto 76 116 lineto  stroke
newpath 68.098 118.358 moveto 76.000 116.000 lineto 70.137 121.799 lineto stroke
% Polyline
newpath 111 116 moveto 107 151 lineto  stroke
newpath 109.895 143.279 moveto 107.000 151.000 lineto 105.921 142.825 lineto stroke
	[4.000000] 0 setdash
% Polyline
newpath 133 274 moveto 98 274 lineto 98 248 lineto 133 248 lineto closepath gsave  0.900 setgray fill grestore  stroke
	[] 0 setdash
	[4.000000] 0 setdash
% Polyline
newpath 398 154 moveto 406 168 lineto gsave  1.000 setgray fill grestore  stroke
	[] 0 setdash
newpath 403.767 160.062 moveto 406.000 168.000 lineto 400.294 162.046 lineto stroke
	[4.000000] 0 setdash
% Polyline
newpath 388 154 moveto 380 169 lineto gsave  1.000 setgray fill grestore  stroke
	[] 0 setdash
newpath 385.529 162.882 moveto 380.000 169.000 lineto 382.000 161.000 lineto stroke
	[4.000000] 0 setdash
% Polyline
newpath 386 175 moveto 386 169 lineto 371 169 lineto 371 175 lineto closepath gsave  1.000 setgray fill grestore  stroke
	[] 0 setdash
	[4.000000] 0 setdash
% Polyline
newpath 399 174 moveto 399 168 lineto 412 168 lineto 412 174 lineto closepath gsave  1.000 setgray fill grestore  stroke
	[] 0 setdash
% Polyline
newpath 439 90 moveto 439 81 lineto 426 81 lineto 426 90 lineto closepath  stroke
% Polyline
newpath 452 90 moveto 452 81 lineto 439 81 lineto 439 90 lineto closepath  stroke
% Polyline
newpath 465 90 moveto 465 81 lineto 452 81 lineto 452 90 lineto closepath  stroke
% Polyline
newpath 478 90 moveto 478 81 lineto 465 81 lineto 465 90 lineto closepath  stroke
% Polyline
newpath 478 138 moveto 478 81 lineto 426 81 lineto 426 138 lineto closepath  stroke
% Polyline
newpath 50 99 moveto 84 99 lineto  stroke
newpath 76.000 97.000 moveto 84.000 99.000 lineto 76.000 101.000 lineto stroke
% Polyline
newpath 233 99 moveto 228 113 lineto  stroke
newpath 232.574 106.139 moveto 228.000 113.000 lineto 228.807 104.793 lineto stroke
% Polyline
newpath 269 139 moveto 269 79 lineto 214 79 lineto 214 139 lineto closepath  stroke
% Polyline
newpath 248 99 moveto 257 113 lineto  stroke
newpath 254.356 105.189 moveto 257.000 113.000 lineto 250.992 107.352 lineto stroke
/Times-Roman findfont 10.000 scalefont setfont
177 225 moveto 
1 -1 scale
(After Page Promotion) gsave  0.000 rotate show grestore 1 -1 scale
% Polyline
newpath 397 99 moveto 406 113 lineto  stroke
newpath 403.356 105.189 moveto 406.000 113.000 lineto 399.992 107.352 lineto stroke
% Polyline
newpath 418 139 moveto 418 81 lineto 364 81 lineto 364 139 lineto closepath  stroke
% Interpolated spline
newpath 437 86 moveto
	436.401 91.096 436.401 93.346 437 95 curveto
	437.693 96.914 440.021 100.073 442 101 curveto
	444.027 101.949 448.007 101.826 450 101 curveto
	451.762 100.270 454.270 97.762 455 96 curveto
	455.464 94.879 455.464 93.379 455 90 curveto
 stroke
newpath 454.107 98.198 moveto 455.000 90.000 lineto 458.070 97.654 lineto stroke
% Interpolated spline
newpath 449 86 moveto
	448.401 91.096 448.401 93.346 449 95 curveto
	449.693 96.914 452.021 100.073 454 101 curveto
	456.027 101.949 460.007 101.826 462 101 curveto
	463.762 100.270 466.270 97.762 467 96 curveto
	467.464 94.879 467.464 93.379 467 90 curveto
 stroke
newpath 466.107 98.198 moveto 467.000 90.000 lineto 470.070 97.654 lineto stroke
/Times-Roman findfont 10.000 scalefont setfont
22 69 moveto 
1 -1 scale
(Root set) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Roman findfont 10.000 scalefont setfont
91 69 moveto 
1 -1 scale
(Heap) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Roman findfont 10.000 scalefont setfont
166 69 moveto 
1 -1 scale
(Root set) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Roman findfont 10.000 scalefont setfont
235 69 moveto 
1 -1 scale
(Heap) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Roman findfont 10.000 scalefont setfont
313 69 moveto 
1 -1 scale
(Root set) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Roman findfont 10.000 scalefont setfont
399 69 moveto 
1 -1 scale
(Heap) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Roman findfont 10.000 scalefont setfont
137 265 moveto 
1 -1 scale
(FromSpace page) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Roman findfont 10.000 scalefont setfont
295 265 moveto 
1 -1 scale
(ToSpace page) gsave  0.000 rotate show grestore 1 -1 scale
$F2psEnd
%%EndDocument
 @endspecial 930 2901 a(6)p eop
%%Page: 7 7
7 6 bop 28 161 a Fk(If)15 b(the)h(ro)q(ot)f(is)g(am)o(biguous,)e(the)j
(ob)r(ject)g(cannot)f(b)q(e)h(mo)o(v)o(ed)e(since)i(the)g(lo)q(cation)e
(of)g(the)i(ro)q(ot)g(cannot)f(b)q(e)h(up)q(dated)-34
211 y(to)c(the)i(new)f(p)q(osition,)f(therfore)i(the)f(whole)g(page)f
(to)h(whic)o(h)g(it)f(b)q(elongs)h(is)g(preserv)o(ed.)19
b(This)13 b(is)g(done)g(b)o(y)f Fj(pr)n(omoting)h Fk(the)-34
260 y(page)i(in)o(to)f Fj(T)m(oSp)n(ac)n(e)h Fk(b)o(y)g(simply)e(c)o
(hanging)h(its)h(page)g(space-iden)o(ti\014er)i(to)e
Fj(T)m(o)p Fk(.)21 b(A)o(t)15 b(the)g(end)h(of)e(this)h(promoting)e
(phase,)-34 310 y(all)i(liv)o(e)h(ob)r(jects)h(residing)g(in)f(pages)g
(of)g Fj(F)m(r)n(omSp)n(ac)n(e)h Fk(can)g(b)q(e)g(copied)f(and)h
(compacted)f(in)o(to)f(new)i(pages)g(b)q(elonging)f(to)-34
360 y Fj(T)m(oSp)n(ac)n(e)p Fk(.)30 b(Ro)q(ot)18 b(reac)o(hable)g(ob)r
(jects)h(are)g(tra)o(v)o(ersed)g(with)f(the)g(help)g(of)g(information)d
(pro)o(vided)j(b)o(y)f(the)i(application)-34 410 y(programmer:)c(the)f
(programmer)d(m)o(ust)h(de\014ne)i(the)g(mem)o(b)q(er)d(function)i
Fg(traverse)f Fk(for)h(eac)o(h)g(class)h(of)e(ob)r(jects,)i(to)g(trace)
-34 460 y(the)g(in)o(ternal)g(p)q(oin)o(ters)g(within)f(ob)r(jects)i
(of)f(that)g(class.)28 510 y(Our)j(algorithm)c(uses)18
b(a)e(bit)g(table)g(called)g Fg(LiveMap)p Fk(,)f(to)h(iden)o(tify)g(ob)
r(jects)h(reac)o(hed)h(during)e(tra)o(v)o(ersal,)g(impro)o(ving)-34
559 y(b)q(oth)e(virtual)f(memory)e(p)q(erformance)j(and)g(abilit)o(y)e
(to)i(reclaim)e(storage)i(with)g(resp)q(ect)i(to)e(Bartlett's)g
(algorithm.)28 609 y(The)g(algorithm)e(of)h(the)h(collector)g(is)g(as)g
(follo)o(ws:)16 691 y(1.)21 b(Clear)13 b(the)i Fg(LiveMap)d
Fk(bitmap)16 774 y(2.)21 b(Scan)11 b(the)g(ro)q(ot)g(set)g(to)g
(determine)g(ob)r(jects)g(whic)o(h)g(cannot)g(b)q(e)g(mo)o(v)o(ed.)16
b(An)o(y)10 b(directly)h(reac)o(hable)h(ob)r(ject)f(is)g(mark)o(ed)70
824 y(as)i Fj(live)h Fk(setting)g(a)g(bit)f(in)h(the)g
Fg(LiveMap)f Fk(bitmap)f(and)h(the)i(page)f(to)f(whic)o(h)h(it)g(b)q
(elongs)g(is)f(promoted.)16 907 y(3.)21 b(Scan)15 b(eac)o(h)h(promoted)
e(page)h(linearly)m(,)f(lo)q(oking)f(for)i(liv)o(e)f(ob)r(jects.)23
b(T)m(ra)o(v)o(erse)16 b(eac)o(h)g(liv)o(e)e(ob)r(ject)i(b)o(y)f
(applying)f(the)70 956 y(follo)o(wing)d(pro)q(cedure)16
b(to)d(eac)o(h)i(p)q(oin)o(ter)f(it)f(con)o(tains:)87
1039 y(\(a\))21 b(if)13 b(the)h(p)q(oin)o(ter)g(la)o(ys)g(outside)g
(the)g(heap)h(do)e(nothing;)85 1105 y(\(b\))21 b(if)c(it)g(p)q(oin)o
(ts)g(to)h(an)f(ob)r(ject)h(not)g(y)o(et)g(reac)o(hed:)27
b(sca)o(v)o(enge)18 b(the)g(ob)r(ject)h(if)d(it)i(b)q(elongs)f(to)h(a)f
(non)g(promoted)161 1155 y(page,)d(i.e.)21 b(cop)o(y)15
b(it,)f(mark)f(the)j(cop)o(y)f(as)g Fj(live)p Fk(,)f(set)i(a)e(forw)o
(arding)g(p)q(oin)o(ter)h(within)f(the)i(ob)r(ject)f(to)g(the)g(cop)o
(y)m(.)161 1205 y(Otherwise)i(mark)d(the)i(ob)r(ject)g
Fj(live)f Fk(and,)h(in)f(case)h(it)g(is)f(past)h(the)g(curren)o(t)h
(scanning)f(p)q(osition,)f(recursiv)o(ely)161 1254 y(tra)o(v)o(erse)g
(it.)89 1320 y(\(c\))22 b(if)9 b(it)g(p)q(oin)o(ts)h(to)g(a)f
Fj(live)h Fk(ob)r(ject)g(in)g(a)f(non)h(promoted)f(page)h(up)q(date)g
(the)h(p)q(oin)o(ter)f(to)f(the)i(v)n(alue)e(of)g(the)i(forw)o(arding)
161 1370 y(p)q(oin)o(ter)j(stored)h(within)e(the)h(ob)r(ject.)28
1453 y(All)h(new)i(pages)f(allo)q(cated)g(for)g(cop)o(ying)f(reac)o
(hable)i(ob)r(jects)g(b)q(elong)f(to)g Fj(T)m(oSp)n(ac)n(e)p
Fk(,)g(therefore)i(the)e(algorithm)e(do)q(es)-34 1503
y(not)f(need)h(to)f(recursiv)o(ely)h(tra)o(v)o(erse)g(copied)f(ob)r
(jects.)19 b(A)13 b(copied)h(ob)r(ject)g(is)e(tra)o(v)o(ersed)j(when)e
(the)h(collector)f(examines)g(its)-34 1553 y(page,)g(so)h(tra)o(v)o
(ersal)g(is)g(rarely)g(recursiv)o(e.)28 1602 y(In)e(this)h(algorithm)c
(w)o(e)k(ha)o(v)o(e)f(reduced)i(the)f(amoun)o(t)e(of)g(o)o(v)o(erhead)i
(required)g(in)f(eac)o(h)h(ob)r(ject)g(to)f(just)h(whatev)o(er)g(C++)
-34 1652 y(needs)j(for)f(implemen)o(ting)d(classes)17
b(with)e(virtual)f(functions,)i(eliminating)c(the)k(header)g(used)h(in)
d(Bartlett's)i(implemen-)-34 1702 y(tation)d(whic)o(h)h(con)o(tained)g
(a)f(forw)o(ard)h(bit,)f(the)h(size)h(of)e(the)i(ob)r(ject)f(and)g(the)
h(iden)o(ti\014er)f(of)f(a)h(callbac)o(k)f(routine.)-34
1839 y Fl(6)69 b(Multiple)20 b(Heaps)-34 1930 y Fk(Besides)c(the)f(cop)
o(y-collected)h(heap,)e(also)g(the)i(traditional)d(uncollected)j(heap)f
(m)o(ust)e(still)h(b)q(e)h(supp)q(orted)h(b)o(y)f(pro)o(viding)-34
1980 y(the)f(primitiv)o(es)e Fg(malloc)g Fk(or)h Fg(new)g
Fk(on)h(uncollected)g(classes.)19 b(The)14 b(uncollected)h(heap)e
(cannot)h(b)q(e)g(eliminated)e(since)i(there)-34 2030
y(are)i(programs)f(and)i(libraries)e(whic)o(h)i(ma)o(y)d(use)j
(uncollected)g(ob)r(jects)h(in)d(an)h(unsafe)h(w)o(a)o(y)f(for)f(the)i
(collector)g([11)o(],)f(and)-34 2079 y(there)g(are)f(ob)r(jects)g(that)
g(can't)f(b)q(e)i(relo)q(cated.)k(Ho)o(w)o(ev)o(er,)15
b(w)o(e)g(m)o(ust)e(allo)o(w)g(ob)r(jects)j(in)e(the)h(uncollected)h
(heap)f(to)f(p)q(oin)o(t)-34 2129 y(to)f(ob)r(jects)j(in)d(the)h
(collected)h(heap)f(and)g(vicev)o(ersa.)28 2179 y(The)k(collector)g
(algorithm)d(describ)q(ed)20 b(previously)d(relies)i(on)e(the)h(fact)g
(that)g(all)f(lo)q(cations)g(whic)o(h)g(migh)o(t)f(con)o(tain)-34
2229 y(am)o(biguous)11 b(p)q(oin)o(ters)i(are)h(kno)o(wn)f(in)f(adv)n
(ance:)18 b(they)c(coincide)f(with)g(the)h(ro)q(ot)f(set.)19
b(Therefore)14 b(pages)g(to)f(b)q(e)g(promoted)-34 2279
y(can)h(b)q(e)g(iden)o(ti\014ed)g(b)o(y)g(a)g(single)f(linear)h(scan)g
(of)f(the)i(ro)q(ot)f(set,)g(in)g(the)g(promotion)e(step)j(of)e(the)h
(algorithm.)28 2329 y(Ho)o(w)o(ev)o(er,)d(when)g(m)o(ultiple)d(heaps)j
(are)g(presen)o(t)h(and)e(p)q(oin)o(ters)h(across)g(heaps)g(are)g(allo)
o(w)o(ed,)f(am)o(bigous)e(p)q(oin)o(ters)j(migh)o(t)-34
2378 y(b)q(e)j(detected)i(at)e(a)g(later)g(stage.)28
2428 y(Requiring)h(that)h(suc)o(h)h(p)q(oin)o(ters)f(b)q(e)h
(registered)g(as)f(ro)q(ots)h(is)f(not)f(practical,)h(since)h(it)f(w)o
(ould)f(en)o(tail)g(registering)h(as)-34 2478 y(ro)q(ot)f(an)o(y)g
(collected)h(ob)r(ject)g(whic)o(h)f(is)g(passed)h(to)g(an)f(external)g
(library)g(pro)q(cedure,)i(whic)o(h)e(migh)o(t)e(store)j(suc)o(h)g(p)q
(oin)o(ter)-34 2528 y(in)o(ternally)m(.)g(This)e(can)g(b)q(e)h(cum)o(b)
q(ersome)e(to)g(do)h(and)g(ma)o(y)e(b)q(e)i(acciden)o(tally)f
(forgotten.)28 2578 y(Mo)q(difying)k(the)i(promotion)e(step)i(of)f(the)
h(algorithm)d(to)i(p)q(erform)g(a)g(complete)g(tra)o(v)o(ersal)h(from)e
(the)i(ro)q(ot)g(set)g(in)-34 2627 y(order)14 b(to)g(iden)o(tify)f(am)o
(biguous)e(p)q(oin)o(ters)k(to)e(collected)i(ob)r(jects,)f(w)o(ould)f
(b)q(e)i(a)e(costly)h(solution)f(with)h(liv)o(e)f(ob)r(jects)i(b)q
(eing)-34 2677 y(tra)o(v)o(ersed)g(t)o(wice.)28 2727
y(In)h([1)o(])f(w)o(e)h(prop)q(osed)h(a)e(sligh)o(t)g(v)n(ariation)f
(to)i(our)g(basic)g(algorithm.)21 b(Instead)16 b(of)f(up)q(dating)h(p)q
(oin)o(ters)g(immediately)-34 2777 y(when)c(an)f(ob)r(ject)i(is)e
(copied,)h(just)g(the)g(lo)q(cation)f(to)h(b)q(e)g(up)q(dated)g(is)g
(recorded,)h(using)f(a)f(temp)q(orary)g(bitmap.)k(If)d(it)f(is)g(later)
930 2901 y(7)p eop
%%Page: 8 8
8 7 bop -34 161 a Fk(disco)o(v)o(ered)14 b(that)f(the)g(ob)r(ject)h
(should)f(ha)o(v)o(e)f(not)h(b)q(een)h(mo)o(v)o(ed,)d(but)i(rather)h
(the)g(page)f(should)f(ha)o(v)o(e)h(b)q(een)h(promoted,)e(all)-34
211 y(the)j(ob)r(jects)h(in)e(suc)o(h)h(page)f(are)h(restored)i(from)12
b(their)j(copies.)21 b(The)15 b(up)q(dates)g(to)g(p)q(oin)o(ters)g(are)
g(p)q(erformed)f(only)g(at)g(the)-34 260 y(end)h(of)f(the)h(algorithm,)
c(using)k(the)g(bitmap)d(and)j(the)g(forw)o(arding)e(p)q(oin)o(ter)i
(stored)h(in)e(the)h(ob)r(jects.)21 b(This)14 b(tec)o(hnique)i(is)-34
310 y(similar)11 b(to)j(the)g(one)g(suggested)i(b)o(y)d(Detlefs)i([8)o
(])e(to)h(handle)g(C/C++)g(unions)g(of)f(p)q(oin)o(ters)h(and)g(non-p)q
(oin)o(ters.)28 360 y(The)e(curren)o(t)i(implem)o(en)o(tation)9
b(uses)k(a)e(simpler)g(solution)g(whic)o(h)h(requires)h(a)e(small)f(co)
q(op)q(eration)i(from)e(other)i(heaps.)-34 410 y(When)17
b(collecting)g(one)g(heap)h Fe(H)s Fk(,)f(all)f(other)h(heaps)h(are)g
(assumed)f(to)g(con)o(tain)f(am)o(biguous)f(p)q(oin)o(ters)j(in)o(to)e
Fe(H)s Fk(.)28 b(In)17 b(the)-34 460 y(page-promotion)c(phase)i(of)g
(the)h(cop)o(ying)e(collector,)i(eac)o(h)f(page)h(b)q(elonging)e(to)h
(another)g(heap)h(is)f(scanned)h(to)f(iden)o(tify)-34
510 y(\(p)q(ossibly\))h(conserv)n(ativ)o(ely)m(,)g(lo)q(cations)g(con)o
(taining)f(p)q(oin)o(ters)i(in)o(to)e(the)i(cop)o(ying)f(collector)g
(heap.)26 b(All)15 b(suc)o(h)i(lo)q(cations)-34 559 y(are)d(dealt)g(as)
g(am)o(biguous)d(ro)q(ots.)-34 676 y Fd(6.1)55 b(User)19
b(Collected)e(Heaps)-34 752 y Fk(One)e(goal)e(of)h(the)h(CMM)f(is)g(to)
h(allo)o(w)d(users)k(to)e(build)g(their)h(o)o(wn)f(heaps)h(with)f(sp)q
(eci\014c)i(allo)q(cation)d(strategies)i(for)f(their)-34
802 y(applications.)28 852 y(W)m(e)g(m)o(ust)e(ho)o(w)o(ev)o(er)j
(ful\014ll)d(some)h(essen)o(tial)h(requiremen)o(ts)g(for)g(the)g
(solution)f(to)h(b)q(e)h(consisten)o(t)g(and)e(practical:)28
943 y Ff(\017)21 b Fk(allo)o(w)12 b(p)q(oin)o(ters)i(across)h(heaps:)k
(restricting)c(the)f(range)g(of)f(p)q(oin)o(ters)i(is)f(di\016cult)f
(and)h(incon)o(v)o(enien)o(t.)28 1026 y Ff(\017)21 b
Fk(transitivit)o(y)11 b(of)g(liv)o(eness:)18 b(if)11
b(an)h(ob)r(ject)h(is)g(p)q(oin)o(ted)f(to)g(b)o(y)g(a)g(liv)o(e)f(ob)r
(ject)i(it)f(is)g(liv)o(e)g(as)g(w)o(ell.)17 b(W)m(e)11
b(m)o(ust)h(ensure)h(that)70 1076 y(a)g(p)q(oin)o(ter)h(crossing)h
(heap)f(b)q(oundaries)g(do)q(es)h(not)f(go)f(unnoticed)h(b)o(y)g(the)g
(collector.)28 1159 y Ff(\017)21 b Fk(indep)q(endence)12
b(of)e(collectors:)17 b(it)10 b(m)o(ust)g(b)q(e)h(p)q(ossible)g(to)f
(write)h(a)f(collector)h(for)f(a)h(particular)f(heap,)h(without)f
(relying)70 1209 y(on)j(the)i(collectors)f(for)g(other)g(heaps,)g(pro)o
(vided)g(the)h(ro)q(ot)e(set)i(for)f(this)g(heap)g(is)g(kno)o(wn.)28
1292 y Ff(\017)21 b Fk(co)q(ordination)16 b(among)e(heaps:)25
b(a)17 b(simple)e(set)j(of)e(con)o(v)o(en)o(tions)h(is)g(established)h
(to)f(ensure)h(that)f(p)q(oin)o(ters)h(across)70 1342
y(heaps)c(can)g(b)q(e)h(prop)q(erly)f(tra)o(v)o(ersed.)28
1433 y(In)e(the)g(follo)o(wing)d(\014gure)k(three)g(heaps)f(are)h
(presen)o(t:)18 b(the)13 b(uncollected,)f(the)h(cop)o(y)f(collected,)g
(and)g(one)g(user)h(collected)-34 1483 y(heap.)246 2412
y @beginspecial 0 @llx 0 @lly 333 @urx 210 @ury 3330
@rwi @setspecial
%%BeginDocument: xfig/mixed.eps
/$F2psDict 6400 dict def 
$F2psDict begin
$F2psDict /mtrx matrix put
/l {lineto} bind def
/m {moveto} bind def
/s {stroke} bind def
/n {newpath} bind def
/gs {gsave} bind def
/gr {grestore} bind def
/clp {closepath} bind def
/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul setrgbcolor} bind def
/col-1 {} def
/col0 {0 0 0 setrgbcolor} bind def
/col1 {0 0 1 setrgbcolor} bind def
/col2 {0 1 0 setrgbcolor} bind def
/col3 {0 1 1 setrgbcolor} bind def
/col4 {1 0 0 setrgbcolor} bind def
/col5 {1 0 1 setrgbcolor} bind def
/col6 {1 1 0 setrgbcolor} bind def
/col7 {1 1 1 setrgbcolor} bind def
	end
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def

$F2psBegin
0 setlinecap 0 setlinejoin
-13 60 translate
0.0 210.0 translate 0.900 -0.900 scale
0.500 setlinewidth
% Polyline
n 34 249 m 34 279 l  19 294 l  39 284 l 
 44 299 l  49 284 l  69 294 l  54 279 l  54 249 l 
 34 249 l  clp gs col-1 s gr
% Polyline
n 294 294 m 244 294 l  244 229 l  294 229 l 
 clp gs 0.85 setgray fill gr
gs col-1 s gr
% Polyline
n 229 224 m 179 224 l  179 159 l  229 159 l 
 clp gs 0.60 setgray fill gr
gs col-1 s gr
% Polyline
n 129 199 m 119 214 l  134 204 l  139 219 l 
 144 204 l  159 214 l  149 199 l  149 169 l  129 169 l 
 clp gs 0.60 setgray fill gr
gs col-1 s gr
% Polyline
n 164 154 m 114 154 l  114 89 l  164 89 l 
 clp gs 0.85 setgray fill gr
gs col-1 s gr
% Polyline
n 74 279 m 14 279 l  14 89 l  74 89 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 294 224 m 244 224 l  244 159 l  294 159 l 
 clp gs 0.60 setgray fill gr
gs col-1 s gr
% Polyline
n 229 294 m 179 294 l  179 229 l  229 229 l 
 clp gs 0.85 setgray fill gr
gs col-1 s gr
% Polyline
n 69 214 m 69 169 l  19 169 l  19 214 l 
 clp gs col-1 s gr
% Polyline
n 69 149 m 69 99 l  19 99 l  19 149 l 
 clp gs col-1 s gr
% Polyline
n 62 244 m 62 239 l  24 239 l  24 244 l 
 clp gs col-1 s gr
% Polyline
n 229 154 m 229 89 l  179 89 l  179 154 l 
 clp gs col-1 s gr
% Polyline
n 62 259 m 62 254 l  24 254 l  24 259 l 
 clp gs col-1 s gr
% Polyline
n 258 97 m 258 97 l  258 97 l  258 97 l 
 clp gs col-1 s gr
% Polyline
n 219 174 m 189 174 l  189 164 l  219 164 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 89 134 m 89 134 l  89 134 l  89 134 l 
 clp gs col-1 s gr
% Polyline
n 284 174 m 254 174 l  254 164 l  284 164 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 284 219 m 254 219 l  254 209 l  284 209 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 294 154 m 294 89 l  244 89 l  244 154 l 
 clp gs col-1 s gr
% Polyline
n 269 169 m 269 149 l gs col-1 s gr
n 267.000 157.000 m 269.000 149.000 l 271.000 157.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 204 144 m 204 164 l gs col-1 s gr
n 206.000 156.000 m 204.000 164.000 l 202.000 156.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 269 214 m 269 234 l gs col-1 s gr
n 271.000 226.000 m 269.000 234.000 l 267.000 226.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 220 149 m 189 149 l  189 139 l  220 139 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 209 169 m 254 169 l gs col-1 s gr
n 246.000 167.000 m 254.000 169.000 l 246.000 171.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 149 191 m 129 191 l  129 184 l  149 184 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 59 144 m 124 144 l gs col-1 s gr
n 116.000 142.000 m 124.000 144.000 l 116.000 146.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 59 204 m 89 204 l  89 239 l  124 239 l gs col-1 s gr
n 116.000 237.000 m 124.000 239.000 l 116.000 241.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 219 219 m 189 219 l  189 209 l  219 209 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 164 294 m 164 229 l  114 229 l  114 294 l 
 clp gs col-1 s gr
% Polyline
n 154 149 m 124 149 l  124 139 l  154 139 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 154 244 m 124 244 l  124 234 l  154 234 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 149 144 m 189 144 l gs col-1 s gr
n 181.000 142.000 m 189.000 144.000 l 181.000 146.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 149 239 m 189 239 l gs col-1 s gr
n 181.000 237.000 m 189.000 239.000 l 181.000 241.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 62 249 m 62 244 l  24 244 l  24 249 l 
 clp gs col-1 s gr
% Polyline
n 62 254 m 62 249 l  24 249 l  24 254 l 
 clp gs col-1 s gr
% Polyline
n 59 179 m 129 179 l gs col-1 s gr
n 121.000 177.000 m 129.000 179.000 l 121.000 181.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 374 274 m 364 274 l  364 264 l  374 264 l 
 clp gs 0.85 setgray fill gr
gs col-1 s gr
% Polyline
n 374 204 m 364 204 l  364 194 l  374 194 l 
 clp gs 0.60 setgray fill gr
gs col-1 s gr
% Polyline
n 164 224 m 164 159 l  114 159 l  114 224 l 
 clp gs col-1 s gr
% Polyline
n 149 179 m 129 179 l  129 172 l  149 172 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 146 175 m 154 175 l  189 144 l gs col-1 s gr
n 181.685 147.807 m 189.000 144.000 l 184.337 150.801 l gs 2 setlinejoin col-1 s gr
% Polyline
n 146 187 m 154 187 l  189 240 l gs col-1 s gr
n 186.260 232.222 m 189.000 240.000 l 182.923 234.426 l gs 2 setlinejoin col-1 s gr
% Polyline
n 284 149 m 253 149 l  253 139 l  284 139 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 284 244 m 254 244 l  254 234 l  284 234 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 62 239 m 62 234 l  24 234 l  24 239 l 
 clp gs col-1 s gr
% Polyline
n 214 214 m 254 214 l gs col-1 s gr
n 246.000 212.000 m 254.000 214.000 l 246.000 216.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 219 244 m 189 244 l  189 234 l  219 234 l 
 clp gs 1.00 setgray fill gr
gs col-1 s gr
% Polyline
n 204 239 m 204 219 l gs col-1 s gr
n 202.000 227.000 m 204.000 219.000 l 206.000 227.000 l gs 2 setlinejoin col-1 s gr
% Polyline
n 374 139 m 374 129 l  364 129 l  364 139 l 
 clp gs col-1 s gr
/Times-Roman findfont 10.00 scalefont setfont
24 224 m 
gs 1 -1 scale (Static Area) col-1 show gr
/Times-Roman findfont 10.00 scalefont setfont
19 159 m 
gs 1 -1 scale (System Stack) col-1 show gr
/Times-Roman findfont 10.00 scalefont setfont
24 269 m 
gs 1 -1 scale (Registers) col-1 show gr
/Times-Roman findfont 10.00 scalefont setfont
19 79 m 
gs 1 -1 scale (Global Roots) col-1 show gr
/Times-Roman findfont 10.00 scalefont setfont
319 189 m 
gs 1 -1 scale (User Collected) col-1 show gr
/Times-Roman findfont 10.00 scalefont setfont
319 139 m 
gs 1 -1 scale (Heap) col-1 show gr
/Times-Roman findfont 10.00 scalefont setfont
319 274 m 
gs 1 -1 scale (Heap) col-1 show gr
/Times-Roman findfont 10.00 scalefont setfont
319 204 m 
gs 1 -1 scale (Heap) col-1 show gr
/Times-Roman findfont 10.00 scalefont setfont
118 167 m 
gs 1 -1 scale (User Roots) col-1 show gr
/Times-Roman findfont 10.00 scalefont setfont
319 259 m 
gs 1 -1 scale (Uncollected) col-1 show gr
/Times-Roman findfont 10.00 scalefont setfont
319 124 m 
gs 1 -1 scale (Copy Collected) col-1 show gr
/Times-Italic findfont 10.00 scalefont setfont
130 146 m 
gs 1 -1 scale (a) col-1 show gr
/Times-Italic findfont 10.00 scalefont setfont
194 147 m 
gs 1 -1 scale (b) col-1 show gr
/Times-Italic findfont 10.00 scalefont setfont
257 146 m 
gs 1 -1 scale (e) col-1 show gr
/Times-Italic findfont 10.00 scalefont setfont
258 172 m 
gs 1 -1 scale (d) col-1 show gr
/Times-Italic findfont 10.00 scalefont setfont
258 217 m 
gs 1 -1 scale (i) col-1 show gr
/Times-Italic findfont 10.00 scalefont setfont
259 241 m 
gs 1 -1 scale (j) col-1 show gr
/Times-Italic findfont 10.00 scalefont setfont
194 241 m 
gs 1 -1 scale (g) col-1 show gr
/Times-Italic findfont 10.00 scalefont setfont
193 217 m 
gs 1 -1 scale (h) col-1 show gr
/Times-Italic findfont 10.00 scalefont setfont
130 242 m 
gs 1 -1 scale (f) col-1 show gr
/Times-Italic findfont 10.00 scalefont setfont
194 171 m 
gs 1 -1 scale (c) col-1 show gr
$F2psEnd
%%EndDocument
 @endspecial 28 2486 a(All)j(six)g(p)q(ossible)g(cross-heap)i(p)q(oin)o
(ters)f(are)g(sho)o(wn.)26 b(The)17 b(user)g(heap)g(is)f(main)o(tained)
e(b)o(y)i(the)h(user,)h(who)e(k)o(eeps)i(a)-34 2536 y(record)13
b(of)f(the)h(ro)q(ots)f(in)o(to)g(his)g(heap,)g(so)g(that)h(he)f(can)h
(p)q(erform)e(a)h(collection)g(of)f(that)i(heap)f(when)h(appropriate,)f
(without)-34 2586 y(in)o(v)o(olving)j(the)i(general)h(collector.)28
b(Ho)o(w)o(ev)o(er)17 b(the)h(general)f(collector)h(m)o(ust)e(b)q(e)i
(capable)f(of)f(iden)o(tifying)g(for)h(instance)-34 2636
y(ob)r(ject)d Fe(e)h Fk(as)f(liv)o(e,)e(ev)o(en)j(though)e(this)h(in)o
(v)o(olv)o(es)f(passing)h(through)g(sev)o(eral)g(heaps.)930
2901 y(8)p eop
%%Page: 9 9
9 8 bop -34 161 a Fd(6.2)55 b(Customising)18 b(the)g(GC)-34
237 y Fk(The)d(basic)h(op)q(erations)f(of)g(a)g(cop)o(ying)f(tracing)h
(collector)h(are)f(tra)o(v)o(ersal)h(and)f(sca)o(v)o(enging.)21
b(The)16 b Fg(traverse)e Fk(pro)q(cedure)-34 287 y(is)f(used)i(in)e
(the)h(\014rst)g(phase)h(of)e(the)h(collector)g(to)f(iden)o(tify)g(liv)
o(e)g(ob)r(jects,)h(the)g Fg(scavenge)e Fk(pro)q(cedure)k(is)d(used)i
(to)e(cop)o(y)h(an)-34 337 y(ob)r(ject)g(or)g(p)q(erform)f(whatev)o(er)
i(action)f(is)f(needed)j(to)d(preserv)o(e)j(it.)28 387
y(One)c(w)o(a)o(y)e(to)h(customise)g(these)i(op)q(erations)e(is)g(to)g
(use)h(the)g(mec)o(hanism)d(of)i Fj(c)n(al)r(lb)n(acks)p
Fk(,)g(used)h(for)f(instance)h(in)e(program-)-34 437
y(ming)h(windo)o(w)h(based)i(user)h(in)o(terfaces.)k(With)12
b(this)i(sc)o(hema,)e(a)h(user)i(w)o(ould)d(register)j(a)e(sp)q
(eci\014c)i(callbac)o(k)d(routine)i(with)-34 487 y(the)i(general)f
(garbage)g(collector,)h(for)f(use)h(on)f(sp)q(eci\014c)i(t)o(yp)q(e)f
(of)f(ob)r(jects.)23 b(So)16 b(when)f(the)h(garbage)f(collector)h
(recognises)-34 536 y(one)e(of)f(these)i(ob)r(jects)h(during)d(tra)o(v)
o(ersal,)h(it)f(applies)h(the)g(appropriate)g(callbac)o(k)f(to)h
(collect)g(the)h(ob)r(ject.)28 586 y(Callbac)o(ks)g(can)h(b)q(e)h
(di\013eren)o(t)g(for)f(eac)o(h)g(individual)e(ob)r(ject,)j(but)g(this)
f(is)g(not)g(necessary)i(for)d(our)i(purp)q(oses,)g(so)f(w)o(e)-34
636 y(prefer)h(to)g(replace)g(callbac)o(ks)g(with)f(mem)o(b)q(er)f
(functions.)26 b(This)16 b(mak)o(es)g(these)i(functions)f(more)e(con)o
(v)o(enien)o(t)i(to)f(de\014ne)-34 686 y(and)d(to)h(retriev)o(e)h(b)o
(y)f(the)g(collector)h(through)f(the)g(standard)g(mec)o(hanism)e(of)h
(C++.)28 736 y(Moreo)o(v)o(er)g(the)g Fg(traverse)d Fk(function)i
(could)h(actually)e(b)q(e)i(generated)h(automatically)9
b(and)j(no)g(registration)g(has)h(to)f(b)q(e)-34 785
y(added)i(in)f(the)i(application)d(programs.)17 b(A)d(v)o(ersion)g(of)f
(our)h(algorithm)e(for)h(C)h(w)o(ould)f(still)g(exploit)g(callbac)o
(ks.)-34 902 y Fd(6.3)55 b(Co)r(ordination)-34 978 y
Fk(T)m(o)11 b(ac)o(hiev)o(e)i(co)q(ordination)e(among)g(collectors)i
(for)f(the)h(v)n(arious)e(heaps,)i(one)g(has)f(to)g(agree)h(to)f(a)g
(mec)o(hanism)e(that)j(allo)o(ws)-34 1028 y(tra)o(v)o(ersing)i(ob)r
(jects)h(in)e(di\013eren)o(t)i(heaps)f(on)f(b)q(ehalf)h(of)f(the)h
(collector)g(for)g(another)g(heap.)21 b(While)14 b(tra)o(v)o(ersing)h
(a)f(foreign)-34 1078 y(heap,)f(a)f(collector)h(should)g(not)g(b)q(e)g
(allo)o(w)o(ed)f(to)h(mak)o(e)e(c)o(hanges)j(to)e(the)i(ob)r(jects)g
(it)e(visits,)h(except)h(to)f(up)q(date)g(recognised)-34
1128 y(p)q(oin)o(ters)h(to)g(an)g(ob)r(ject)g(in)g(its)g(o)o(wn)f
(heap,)h(after)g(the)g(ob)r(ject)h(has)f(b)q(een)h(mo)o(v)o(ed.)28
1177 y(This)j(means)f(that)h(one)g(m)o(ust)f(p)q(erform)g(sca)o(v)o
(enging)g(only)g(for)h(ob)r(jects)h(in)e(the)h(heap)h(b)q(eing)e
(collected.)31 b(In)18 b(other)-34 1227 y(w)o(ords)13
b(the)h(sca)o(v)o(enge)g(pro)q(cedure)h(m)o(ust)d(remain)g(the)i(same)e
(throughout)h(a)g(collection,)g(but)g(the)h(sca)o(v)o(enge)g(for)f(one)
g(heap)-34 1277 y(m)o(ust)f(not)g(op)q(erate)i(on)f(ob)r(jects)h(in)e
(other)h(heaps.)19 b Fg(scavenge)11 b Fk(is)h(then)i(implemen)o(ted)d
(a)h(mem)o(b)q(er)f(function)i(of)f(eac)o(h)h(heap)-34
1327 y(class.)28 1377 y Fg(traverse)c Fk(instead)i(m)o(ust)f(b)q(e)h
(sp)q(ecialised)h(according)e(to)h(the)g(t)o(yp)q(e)h(of)e(the)h(ob)r
(ject,)h(so)f(w)o(e)g(implem)o(en)o(t)e(it)h(as)h(a)f(mem)o(b)q(er)-34
1427 y(function)j(of)h(eac)o(h)g(class)g(of)g(ob)r(jects.)28
1476 y(The)g(follo)o(wing)e(\014gure)i(illustrates)g(the)h(in)o(terpla)
o(y)e(b)q(et)o(w)o(een)i Fg(scavenge)d Fk(and)i Fg(traverse)p
Fk(:)265 2018 y @beginspecial 0 @llx 0 @lly 324 @urx
117 @ury 3240 @rwi @setspecial
%%BeginDocument: xfig/acrossheapS.eps
/$F2psDict 32 dict def 
$F2psDict begin
	$F2psDict /mtrx matrix put

	end
	/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
	/$F2psEnd {$F2psEnteredState restore end} def
	%%EndProlog

$F2psBegin
1 setlinecap 1 setlinejoin
-45 13 translate
0.000000 117.000000 translate 0.900 -0.900 scale
1.000 setlinewidth
% Polyline
newpath 386 109 moveto 259 109 lineto 259 24 lineto 386 24 lineto closepath gsave  0.800 setgray fill grestore  stroke
% Polyline
newpath 209 109 moveto 64 109 lineto 64 24 lineto 209 24 lineto closepath gsave  0.500 setgray fill grestore  stroke
% Polyline
newpath 99 49 moveto 279 49 lineto  stroke
newpath 271.000 47.000 moveto 279.000 49.000 lineto 271.000 51.000 lineto stroke
% Polyline
newpath 409 144 moveto 409 14 lineto 49 14 lineto 49 144 lineto closepath  stroke
% Polyline
newpath 113 77 moveto 72 77 lineto 72 40 lineto 113 40 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 320 79 moveto 279 79 lineto 279 42 lineto 320 42 lineto closepath gsave  1.000 setgray fill grestore  stroke
% Polyline
newpath 294 69 moveto 159 69 lineto 159 79 lineto  stroke
newpath 161.000 71.000 moveto 159.000 79.000 lineto 157.000 71.000 lineto stroke
% Polyline
newpath 184 94 moveto 134 94 lineto 134 79 lineto 184 79 lineto closepath gsave  1.000 setgray fill grestore  stroke
/Times-Italic findfont 10.000 scalefont setfont
294 54 moveto 
1 -1 scale
(B1) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Italic findfont 10.000 scalefont setfont
84 64 moveto 
1 -1 scale
(A1) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Italic findfont 10.000 scalefont setfont
154 89 moveto 
1 -1 scale
(A2) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Roman findfont 10.000 scalefont setfont
114 124 moveto 
1 -1 scale
(Heap A) gsave  0.000 rotate show grestore 1 -1 scale
/Times-Roman findfont 10.000 scalefont setfont
309 124 moveto 
1 -1 scale
(Heap B) gsave  0.000 rotate show grestore 1 -1 scale
$F2psEnd
%%EndDocument
 @endspecial 28 2093 a(Supp)q(ose)i(a)g(garbage)f(collection)g(is)g
(started)i(in)e(heap)g Fe(A)h Fk(whic)o(h)f(uses)i(a)e(cop)o(y)h
(collector.)22 b(While)15 b(tra)o(v)o(ersing)h(ob)r(ject)-34
2142 y Fe(A)p Fk(1,)c(the)h(garbage)f(collector)g(iden)o(ti\014es)h(a)f
(p)q(oin)o(ter)g(to)g(the)h(ob)r(ject)g Fe(B)r Fk(1,)f(b)q(elonging)g
(to)g(heap)g Fe(B)r Fk(.)18 b(Ob)r(ject)c Fe(B)r Fk(1)f(is)f(sca)o(v)o
(enged)-34 2192 y(b)o(y)f(the)h Fg(scavenge)e Fk(function)h(of)f(the)i
(heap)g Fe(A)p Fk(.)17 b(This)12 b(function)f(recognizes)i(ob)r(ject)f
Fe(B)r Fk(1)g(as)f(external)h(to)f(heap)h Fe(A)p Fk(,)f(so)h(it)f(do)q
(es)-34 2242 y(not)k(cop)o(y)g(the)h(ob)r(ject,)g(as)f(it)g(w)o(ould)f
(if)g(it)h(w)o(ere)h(in)o(ternal)f(to)g(the)h(heap,)f(but)h(only)e(tra)
o(v)o(erses)j(the)f(ob)r(ject)g(to)f(determine)-34 2292
y(whether)g(further)g(ob)r(jects)g(in)f(heap)g Fe(A)g
Fk(can)h(b)q(e)f(reac)o(hed)i(from)c(it.)18 b(The)d(b)q(eha)o(viour)f
(of)f Fg(scavenge)f Fk(c)o(hanges)j(again)e(when)-34
2342 y(ob)r(ject)i Fe(A)p Fk(2)g(is)g(reac)o(hed)h(whic)o(h)f(b)q
(elongs)g(to)g(heap)g Fe(A)p Fk(.)21 b(Applying)14 b(the)i(sca)o(v)o
(enge)g(function)e(of)h(heap)g Fe(A)g Fk(has)g(the)h(e\013ect)g(of)-34
2391 y(cop)o(ying)d(ob)r(ject)i Fe(A)p Fk(2.)-34 2529
y Fl(7)69 b(The)22 b(CMM)h(F)-6 b(ramew)n(ork)-34 2620
y Fk(Heap)18 b(memory)d(is)i(divided)g(in)o(to)g(pages)g(of)g(equal)g
(size.)30 b(The)18 b(allo)q(cator)e(for)i(eac)o(h)g(heap)f(requests)j
(pages)e(for)f(storing)-34 2669 y(ob)r(jects)e(from)d(the)i(lo)o(w)f
(lev)o(el)h(page)g(allo)q(cator.)j(Eac)o(h)d(page)g(is)g(tagged)f(with)
h(the)g(heap)h(to)e(whic)o(h)h(it)g(b)q(elongs.)930 2901
y(9)p eop
%%Page: 10 10
10 9 bop 28 161 a Fk(CMM)11 b(uses)h(a)f(bitmap)e(to)i(deal)f(with)h
(in)o(ternal)g(p)q(oin)o(ters)g(to)g(ob)r(jects.)18 b(Whenev)o(er)12
b(a)f(CMM)g(ob)r(ject)h(is)f(created,)h(the)g(bit)-34
211 y(corresp)q(onding)i(to)f(its)g(\014rst)g(w)o(ord)g(is)g(set.)19
b(Using)13 b(this)g(information,)c(a)k(p)q(oin)o(ter)g(inside)g(that)g
(ob)r(ject)h(can)f(b)q(e)h(normalized)-34 260 y(to)f(the)i(b)q
(eginning)e(of)h(the)g(ob)r(ject,)g(simply)e(scanning)i(the)g(bitmap)e
(bac)o(kw)o(ard)i(un)o(til)f(the)i(\014rst)f(set)h(bit)f(is)f(found.)28
310 y(When)f(an)f(ob)r(ject)i(is)e(mo)o(v)o(ed,)f(its)i(\014rst)h(w)o
(ord)e(is)h(replaced)g(b)o(y)g(a)f(forw)o(arding)g(p)q(oin)o(ter)h(to)f
(the)h(new)h(ob)r(ject.)18 b(As)12 b(already)-34 360
y(men)o(tioned,)g(this)j(happ)q(ens)g(only)e(during)h(garbage)g
(collection)f(and)h(the)h(collector)f(can)h(determine)f(this)g
(situation)f(from)-34 410 y(the)h(fact)g(that)g(the)h(ob)r(ject)f(is)g
(mark)o(ed)f Fj(live)g Fk(and)h(it)f(is)h(in)f(a)h(page)g(in)f
Fj(F)m(r)n(omSp)n(ac)n(e)p Fk(.)-34 526 y Fd(7.1)55 b(Class)20
b(CmmOb)s(ject)-34 603 y Fk(The)d(run)g(time)f(supp)q(ort)h(required)h
(for)e(collectable)h(ob)r(jects)h(is)f(pro)o(vided)g(b)o(y)f(the)h
(class)h Fg(CmmObject)p Fk(.)25 b(Ev)o(ery)17 b(class)g(of)-34
653 y(collectable)12 b(ob)r(jects)i(m)o(ust)e(b)q(e)h(deriv)o(ed)g
(from)e Fg(CmmObject)p Fk(.)16 b Fg(CmmObject)11 b Fk(pro)o(vides)i(an)
f(o)o(v)o(erloaded)g Fg(new)g Fk(op)q(erator)i(whic)o(h)-34
702 y(tak)o(es)e(care)i(of)d(allo)q(cating)g(the)i(ob)r(ject)g(in)f(a)g
(sp)q(eci\014ed)h(heap.)18 b(F)m(unction)12 b Fg(traverse)f
Fk(is)h(used)h(to)f(trace)h(accurately)g(ob)r(jects)-34
752 y(allo)q(cated)g(in)h(the)h Fg(DefaultHeap)p Fk(.)h(The)e(other)h
(mem)o(b)q(er)d(functions)j(of)e Fg(CmmObject)f Fk(are)j(useful)f(in)f
(the)i(implemen)o(tation)-34 802 y(of)e(collectors)i(and)e(not)h(relev)
n(an)o(t)g(for)g(normal)d(users)16 b(of)d(the)h(CMM:)-34
893 y Fg(class)21 b(CmmObject)-34 943 y Ff(f)-34 993
y Fg(public:)9 1043 y(void*)g(operator)f(new\(size_t,)g(CmmHeap*)g(=)h
(Cmm::heap\);)9 1093 y(virtual)g(void)g(traverse\(\);)-34
1142 y(protected:)9 1192 y(CmmObject*)f(next\(\);)326
b(//)36 b Fj(r)n(eturns)14 b(the)h(next)g(adjac)n(ent)h(obje)n(ct)9
1242 y Fg(bool)21 b(forwarded\(\);)347 b(//)36 b Fj(tel)r(ls)14
b(whether)g(the)h(obje)n(ct)g(has)g(b)n(e)n(en)g(forwar)n(de)n(d)9
1292 y Fg(void)21 b(SetForward\(CmmObjec)o(t*)e(ptr\);)i(//)36
b Fj(sets)14 b(the)h(forwar)n(ding)f(p)n(ointer)9 1342
y Fg(CmmObject*)20 b(GetForward\(\);)194 b(//)36 b Fj(r)n(eturns)14
b(the)h(forwar)n(d)f(lo)n(c)n(ation)g(of)h(the)g(obje)n(ct)9
1391 y Fg(Heap*)21 b(heap\(\);)435 b(//)36 b Fj(r)n(eturns)14
b(the)h(he)n(ap)g(to)g(which)g(the)g(obje)n(ct)g(b)n(elongs)9
1441 y Fg(void)21 b(mark\(\);)457 b(//)36 b Fj(marking)15
b(primitives)9 1491 y Fg(bool)21 b(IsMarked\(\);)9 1541
y(void)g(SetLiveMap\(\);)-34 1591 y Ff(g)p Fg(;)-34 1707
y Fd(7.2)55 b(Ob)s(ject)19 b(Creation)-34 1784 y Fk(When)c(creating)g
(a)f(collected)i(ob)r(ject)f(one)g(can)g(sp)q(ecify)g(in)f(whic)o(h)h
(heap)g(to)f(allo)q(cate)h(it.)20 b(The)15 b(parameter)f
Fg(heap)g Fk(can)h(b)q(e)-34 1833 y(supplied)f(in)f(the)i(standard)f
(C++)g(placemen)o(t)g(syn)o(tax)f(for)h(the)g Fg(new)g
Fk(op)q(erator:)9 1916 y Fg(p)22 b(=)g(new\(heap\))d(Person\(name,)h
(age\);)-34 1999 y Fk(If)13 b(the)i(user)g(do)q(es)f(not)g(sp)q(ecify)h
(an)o(y)e(heap,)h(the)g(default)g(heap)g Fg(heap)f Fk(is)h(used:)9
2082 y Fg(p)22 b(=)g(new)f(Person\(name,)e(age\);)-34
2165 y Fk(whic)o(h)14 b(is)f(equiv)n(alen)o(t)g(to:)9
2248 y Fg(p)22 b(=)g(new\(Cmm::heap\))c(Person\(name,)i(age\);)-34
2331 y Fk(where)15 b Fg(Cmm::heap)d Fk(is)i(a)f(static)h(mem)o(b)q(er)f
(v)n(ariable)f(initialised)h(to)g Fg(Cmm::theDefaultHeap)o
Fk(.)28 2381 y(When)k(creating)h(collected)f(ob)r(jects,)i(the)f
(programmer)c(can)k(decide)g(case)g(b)o(y)e(case)i(where)g(to)f(allo)q
(cate)g(them.)27 b(In)-34 2431 y(summary)m(,)10 b(the)15
b(follo)o(wing)c(are)j(the)h(alternativ)o(es)f(for)f(ob)r(ject)i(allo)q
(cation:)p 505 2486 872 2 v 634 2532 a Fc(Heap)178 b(Classes)85
b(Creation)p 505 2553 V 525 2598 a Fg(UncollectedHeap)39
b Fk(uncollected)j Fg(new)p Fk(/)p Fg(malloc)569 2663
y(DefaultHeap)106 b Fk(collected)141 b Fg(new)580 2728
y Fk(user)15 b(de\014ned)121 b(collected)76 b Fg(new\(heap\))p
505 2749 V 919 2901 a Fk(10)p eop
%%Page: 11 11
11 10 bop 28 161 a Fk(where)15 b(w)o(e)f(call)f(collected)i(those)g
(classes)g(whic)o(h)e(inherit)h(from)e Fg(CmmObject)g
Fk(and)i(uncollected)h(all)e(others.)28 211 y(With)e(the)i(CMM,)e(ob)r
(ject)i(allo)q(cation)d(is)i(not)g(tied)g(to)f(the)i(t)o(yp)q(e)f(of)g
(an)f(ob)r(ject)i(as)f(in)f(other)i(prop)q(osals,)f(so)g(a)f(program-)
-34 260 y(mer)k(can)i(design)f(his)g(classes)h(without)f(committing)d
(to)j(a)g(particular)g(memory)d(p)q(olicy)m(.)24 b(The)17
b(p)q(olicy)e(can)i(b)q(e)g(decided)-34 310 y(later,)c(or)h(ev)o(en)g
(b)q(e)g(di\013eren)o(t)g(in)g(di\013eren)o(t)g(p)q(ortions)g(of)f(an)g
(application.)k(F)m(or)c(instance,)h(in)f(the)h(P)o(oSSo)f(solv)o(er,)g
(one)h(sets)-34 360 y(the)g(v)n(ariable)f Fg(heap)g Fk(to)h(the)g(heap)
g(implemen)o(ting)d(the)j(stac)o(k)g(p)q(olicy)f(b)q(efore)i(starting)f
(the)g(simpli\014cation.)i(Throughout)-34 410 y(the)e
(simpli\014cation,)d(all)i(ob)r(jects)i(\(monomia)o(l,)10
b(p)q(olynomial,)g(large)k(precision)h(in)o(tegers,)f(lists)g(and)g(so)
g(on\))g(are)g(allo)q(cated)-34 460 y(in)h(this)g(heap)h(and)f(freed)h
(in)f(a)h(single)f(step)h(at)f(the)h(end)g(of)f(the)h
(simpli\014cation.)k(After)c(simpli\014cation,)d(one)j(rev)o(erts)h(to)
-34 510 y(the)d(normal)e(heap.)18 b(It)c(is)g(essen)o(tial)g(that)g
(this)g(can)g(b)q(e)h(done)f(without)g(c)o(hanging)f(a)g(single)h(line)
f(in)h(the)g(user)h(co)q(de.)-34 645 y Fl(8)69 b(Heap)23
b(Classes)-34 735 y Fk(T)m(o)15 b(manage)g(a)g(heap)i(one)f(normally)e
(has)i(to)g(main)o(tain)e(the)i(set)h(of)f(ro)q(ots)g(for)g(the)h(ob)r
(jects)g(in)f(the)h(heap,)f(manage)f(the)-34 785 y(pages)d(where)i(ob)r
(jects)g(are)e(allo)q(cated)g(and)h(implem)o(en)o(t)d(the)j(memory)d
(allo)q(cation)h(and)h(reco)o(v)o(ery)h(primitiv)o(es.)j(A)d(suitable)
-34 835 y(encapsulation)h(for)f(these)i(functionalities)e(is)h(pro)o
(vided)g(b)o(y)f(the)i Fg(Heap)e Fk(class.)-34 949 y
Fd(8.1)55 b(Class)20 b(CmmHeap)-34 1026 y Fk(A)d(class)h(implem)o(en)o
(ting)c(a)j(heap)g(m)o(ust)g(supply)g(de\014nitions)g(for)g(the)g
(follo)o(wing)e(pure)j(virtual)e(functions:)25 b Fg(alloc)16
b Fk(and)-34 1075 y Fg(reclaim)p Fk(,)d(implemen)o(ting)e(the)16
b(memory)c(allo)q(cation)h(strategy)m(,)i Fg(collect)e
Fk(to)i(p)q(erform)f(collection,)g(and)h Fg(scavenge)p
Fk(,)e(the)-34 1125 y(action)18 b(required)h(to)f(preserv)o(e)j(liv)o
(e)c(ob)r(jects)j(encoun)o(tered)g(during)e(tra)o(v)o(ersal.)31
b(Heap)19 b(classes)h(are)e(deriv)o(ed)h(from)e(the)-34
1175 y(abstract)e(class)f Fg(Heap)p Fk(,)e(de\014ned)j(as)f(follo)o
(ws:)-34 1253 y Fg(class)21 b(CmmHeap)-34 1303 y Ff(f)-12
1353 y Fg(public:)9 1403 y(CmmHeap\(\);)696 b(//)36 b
Fj(initialiser)9 1452 y Fg(virtual)21 b(CmmObject*)e(alloc\(int)h
(bytes\))h(=)g(0;)9 1502 y(virtual)g(void)g(reclaim\(void*\))e(=)i(0;)9
1552 y(virtual)g(void)g(collect\(\))f(=)h(0;)-12 1602
y(protected:)9 1652 y(virtual)g(void)g(scavenge\(CmmObje)o(ct)e
(**ptr\))h(=)i(0;)9 1701 y(virtual)f(void)g(externalRoots\(in)o(t)e
(page\))i(=)g(0;)h(//)36 b Fj(se)n(ar)n(ches)22 b Fg(page)35
b Fj(for)15 b(p)n(ointers)f(outside)h(this)g(he)n(ap)9
1751 y Fg(bool)21 b(inside\(CmmObject*)e(ptr\);)304 b(//)36
b Fj(che)n(cks)15 b(if)21 b Fg(ptr)15 b Fj(is)f(within)g(this)h(he)n
(ap)9 1801 y Fg(RootSet*)20 b(roots;)-34 1851 y Ff(g)p
Fg(;)28 1929 y(roots)13 b Fk(p)q(oin)o(ts)h(to)f(an)h(instance)h(of)e
(class)h Fg(RootSet)p Fk(,)e(used)j(for)e(registering)i(ro)q(ots)f(in)o
(to)f(this)h(heap.)-34 2043 y Fd(8.2)55 b(Prede\014ned)18
b(Heaps)-34 2119 y Fk(The)c(CMM)g(pro)o(vides)g(four)g(prede\014ned)h
(heap)g(classes:)28 2198 y Ff(\017)21 b Fg(DefaultHeap)p
Fk(:)15 b(implemen)o(ts)d(a)h(mostly-cop)o(ying)f(generational)h
(collection)g(discipline;)28 2275 y Ff(\017)21 b Fg(UncollectedHeap)o
Fk(:)15 b(it)f(pro)o(vides)g(the)g(traditional)e(man)o(ual)g(allo)q
(cation)g(discipline.)17 b(It)d(is)g(a)o(v)n(ailable)d(through)j(the)70
2325 y(default)h Fg(new)h Fk(op)q(erator)g(or)g(the)h(functions)f(of)g
(the)h Fg(malloc)d Fk(library)m(.)24 b(Ob)r(jects)18
b(not)e(inheriting)f(from)f Fg(CmmObject)70 2375 y Fk(are)g(allo)q
(cated)f(in)h(this)g(heap.)k(There)d(are)f(t)o(w)o(o)g(w)o(a)o(ys)f(to)
h(use)h(it:)116 2453 y Fc({)21 b Fk(b)o(y)14 b(using)f(the)i(standard)f
(global)e Fg(::new)h Fk(op)q(erator;)116 2514 y Fc({)21
b Fk(b)o(y)14 b(using)f Fg(new\(Cmm::theUncoll)o(ected)o(Heap\))d
Fk(for)k(a)f(class)i(deriv)o(ed)f(from)e Fg(CmmObject)p
Fk(.)28 2591 y Ff(\017)21 b Fg(TempHeap)p Fk(:)d(this)d(heap)g(is)g
(useful)f(when)i(within)e(a)g(phase)i(of)e(a)h(program)e(large)i(amoun)
o(ts)e(of)h(temp)q(orary)g(ob)r(jects)70 2641 y(are)g(allo)q(cated)f
(whic)o(h)h(can)g(b)q(e)h(discarded)f(at)g(the)h(end)f(of)f(the)i
(phase.)28 2719 y Ff(\017)21 b Fg(MarkAndSweep)p Fk(:)k(this)19
b(heap)g(implemen)o(ts)d(a)j(mark-and-sw)o(eep)f(p)q(olicy)m(.)31
b(It)19 b(is)g(a)f(fully)g(conserv)n(ativ)o(e)h(collector)70
2769 y(whic)o(h)13 b(do)q(es)i(not)f(require)g(an)o(y)g(information)d
(on)j(the)g(la)o(y)o(out)f(of)g(ob)r(jects.)919 2901
y(11)p eop
%%Page: 12 12
12 11 bop -34 161 a Fl(9)69 b(Using)22 b(the)h Fb(DefaultHea)q(p)-34
252 y Fk(W)m(e)13 b(already)h(describ)q(ed)h(the)g(tec)o(hnique)g(used)
g(b)o(y)e(the)i Fg(DefaultHeap)p Fk(,)c(so)j(w)o(e)g(presen)o(t)h(here)
g(details)f(on)g(ho)o(w)f(to)h(use)h(it.)28 302 y(The)i(default)f
(collector)g(calls)g(the)h(metho)q(d)f Fg(traverse)f
Fk(on)h(collected)h(ob)r(jects)g(to)g(iden)o(tify)e(p)q(oin)o(ters)i
(they)g(con)o(tain)-34 351 y(to)i(other)h(ob)r(jects.)35
b(Users)20 b(ha)o(v)o(e)f(to)g(pro)o(vide)g Fg(traverse)f
Fk(metho)q(ds)g(for)h(eac)o(h)h(class)g(whose)f(data)g(mem)o(b)q(ers)f
(con)o(tain)-34 401 y(p)q(oin)o(ters.)h Fg(traverse)12
b Fk(m)o(ust)h(b)q(e)h(de\014ned)i(according)e(to)f(w)o(ell)h
(de\014ned)h(rules)f(presen)o(ted)i(b)q(elo)o(w,)e(b)q(ecause)h(it)f
(implemen)o(ts)-34 451 y(the)g(in)o(terface)h(b)q(et)o(w)o(een)g(the)f
(CMM)g(and)g(user)h(de\014ned)g(collected)g(ob)r(jects.)28
501 y(These)i(rules)g(ensure)g(that)g(sup)q(erclasses)h(or)e(class)g
(ob)r(jects)i(con)o(tained)e(in)f(the)i(class)f(are)h(correctly)g
(handled.)24 b(The)-34 551 y(follo)o(wing)15 b(example)i(illustrates)i
(the)g(rules,)g(whic)o(h)g(are)f(a)g(generalisation)g(of)g(those)h(in)f
([5)o(].)31 b(Supp)q(ose)19 b(the)g(follo)o(wing)-34
600 y(collected)14 b(classes)i(w)o(ere)e(de\014ned:)-34
681 y Fg(class)21 b(BigNum:)f(public)g(CmmObject)-34
731 y Ff(f)9 781 y Fg(long)h(data;)9 831 y(BigNum*)g(next;)543
b(//)37 b Fj(R)o(ule)15 b(\(a\))g(applies)g(her)n(e)9
881 y Fg(void)21 b(traverse\(\);)-34 930 y Ff(g)p Fg(;)-34
1030 y(class)g(monomial:)e(private)i(BigNum)216 b(//)37
b Fj(R)o(ule)15 b(\(c\))g(applies)g(her)n(e)-34 1080
y Ff(f)9 1130 y Fg(PowerProduct)20 b(pp;)478 b(//)37
b Fj(R)o(ule)15 b(\(b\))g(applies)g(her)n(e)9 1180 y
Fg(void)21 b(traverse\(\);)-34 1229 y Ff(g)p Fg(;)28
1310 y Fk(A)f Fg(BigNum)e Fk(stores)j(in)f Fg(next)f
Fk(a)g(p)q(oin)o(ter)h(to)g(a)f(collected)i(ob)r(ject)f(whic)o(h)g
(needs)h(to)e(b)q(e)i(sca)o(v)o(enged,)g(so)f Fg(traverse)-34
1360 y Fk(b)q(ecomes:)-34 1449 y Fg(void)h(BigNum::traverse)o(\(\))-34
1499 y Ff(f)9 1548 y Fg(scavenge\(&next\);)346 b(//)36
b Fj(Applying)15 b(rule)f(\(a\))-34 1598 y Ff(g)-34 1687
y Fk(Because)i Fg(monomial)d Fk(inherits)i(from)e Fg(BigNum)p
Fk(,)g(the)i(metho)q(d)f Fg(traverse)e Fk(for)j(this)f(base)h(class)g
(m)o(ust)f(b)q(e)h(in)o(v)o(ok)o(ed;)f(\014nally)m(,)-34
1737 y(since)g(a)g Fg(monomial)e Fk(con)o(tains)i(a)g
Fg(BigNum)e Fk(in)i Fg(pp)p Fk(,)f(this)h(ob)r(ject)g(m)o(ust)f(b)q(e)i
(tra)o(v)o(ersed)g(as)f(w)o(ell:)-34 1825 y Fg(void)21
b(monomial::traver)o(se\(\))-34 1875 y Ff(f)9 1925 y
Fg(BigNum::traverse\(\);)323 b(//)37 b Fj(Appling)14
b(rule)h(\(c\))9 1975 y Fg(pp.traverse\(\);)433 b(//)37
b Fj(Applying)15 b(rule)f(\(b\))-34 2025 y Ff(g)28 2113
y Fk(Finally)m(,)d(to)j(deal)f(with)h(m)o(ultiple)d(base)j(classes,)h
(w)o(e)f(m)o(ust)f(iden)o(tify)f(the)j(hidden)f(p)q(oin)o(ter)g(to)f
(the)h(base)h(class)f(presen)o(t)-34 2163 y(inside)20
b(an)f(ob)r(ject.)37 b(This)19 b(cannot)h(b)q(e)h(done)f(in)f(a)h
(compiler)e(indep)q(enden)o(t)j(w)o(a)o(y)m(,)f(so)g(the)g(CMM)g(pro)o
(vides)g(a)g(macro)-34 2213 y Fg(VirtualBase)11 b Fk(whic)o(h)j(is)g
(compiler)e(sp)q(eci\014c.)20 b(F)m(or)13 b(instance,)h(its)g
(de\014nition)g(for)f(the)i(GNU)f(C++)g(compiler)e(is:)9
2294 y Fg(#define)21 b(VirtualBase\(A\))40 b(&)22 b(\(_vb$)f(#)g(A\))28
2375 y Fk(In)14 b(summary)d(the)k(rules)f(are:)-4 2463
y(\(a\))21 b(for)14 b(a)g(class)h(con)o(taining)f(a)g(p)q(oin)o(ter,)h
(sa)o(y)f Fg(class)21 b(C)g Ff(f)h Fj(typ)n(e)g Fg(*)g(x;)f
Ff(g)p Fk(,)14 b(the)h(metho)q(d)f Fg(C::traverse)e Fk(m)o(ust)i(con)o
(tain)70 2513 y Fg(scavenge\(&x\))-7 2595 y Fk(\(b\))22
b(for)c(a)g(class)h(con)o(taining)e(an)h(instance)h(of)f(a)g(collected)
i(ob)r(ject,)f(sa)o(y)g Fg(class)i(C)g Ff(f)h Fj(GcClass)f
Fg(x;)g Ff(g)p Fk(,)e(the)g(metho)q(d)70 2645 y Fg(C::traverse)11
b Fk(m)o(ust)i(con)o(tain)g Fg(x.traverse\(\))-2 2727
y Fk(\(c\))22 b(for)10 b(a)h(class)g(deriv)o(ed)g(from)e(another)j
(collected)f(class,)h(sa)o(y)f Fg(class)20 b(C:)p Fj(GcClass)h
Ff(f)p Fg(...)p Ff(g)p Fk(,)10 b(the)i(metho)q(d)e Fg(C::traverse)70
2777 y Fk(m)o(ust)i(con)o(tain)i Fj(GcClass)s Fg(::traverse\(\))p
Fk(.)919 2901 y(12)p eop
%%Page: 13 13
13 12 bop -7 161 a Fk(\(d\))22 b(for)f(a)g(class)h(deriving)f(from)e(a)
i(virtual)g(base)h(class,)h(sa)o(y)f(class)f Fg(C:)h(virtual)e
Fj(GcClass)i Ff(f)p Fg(...)p Ff(g)p Fk(,)f(the)h(metho)q(d)70
211 y Fg(C::traverse)11 b Fk(m)o(ust)i(con)o(tain)g Fg
(scavenge\(VirtualBas)o(e\()p Fj(GcClass)p Fg(\)\))o
Fk(;)28 300 y(Prepro)q(cessing)j([9)o(])d(or)g(compiler)f(supp)q(ort)i
([17)o(])f(could)g(b)q(e)h(adopted)g(to)f(a)o(v)o(oid)f(hand)i(co)q
(ding)f(of)f(these)j(functions)f(and)-34 350 y(risks)g(of)f(subtle)i
(errors)g(in)e(programs.)k(W)m(e)d(plan)f(to)h(address)h(this)f(issue)g
(in)g(the)g(future.)-34 487 y Fl(10)69 b Fb(MarkAndSw)q(eep)27
b Fl(Heap)-34 578 y Fk(Since)14 b(a)g(mark-and-sw)o(eep)g(collector)g
(do)q(es)h(not)f(mo)o(v)o(e)f(ob)r(jects,)i(it)f(can)g(b)q(e)h(fully)e
(conserv)n(ativ)o(e)i(and)f(therefore)h(it)f(needs)-34
628 y(no)k(information)e(ab)q(out)i(in)o(ternal)g(ob)r(ject)h(la)o(y)o
(out.)31 b(Other)19 b(CMM)g(heaps,)h(e.g.)31 b(the)19
b Fg(DefaultHeap)p Fk(,)e(whic)o(h)h(p)q(erform)-34 678
y(cop)o(ying,)c(require)h(that)g(a)g(metho)q(d)f Fg(traverse)f
Fk(b)q(e)j(supplied)e(for)h(eac)o(h)g(collected)h(class.)21
b(A)15 b(mark-and-sw)o(eep)f(collector)-34 728 y(can)g(then)g(b)q(e)h
(simpler)e(to)g(use.)28 777 y(On)19 b(the)f(other)h(hand,)g(a)f(fully)f
(conserv)n(ativ)o(e)i(mark-and-sw)o(eep)e(collector)h(ma)o(y)f(not)h
(iden)o(tify)f(all)g(garbage.)31 b(The)-34 827 y(amoun)o(t)16
b(of)i(unreclaimed)g(garbage)h(ma)o(y)d(v)n(ary)i(dep)q(ending)h(on)g
(the)g(sp)q(eci\014c)h(application)d(and)i(the)g(data)f(structures)-34
877 y(used,)c(and)g(is)g(quite)f(hard)h(to)g(estimate.)28
927 y(F)m(or)i(instance,)i(if)d(the)i(application)e(uses)j(a)e(large)g
(n)o(um)o(b)q(er)g(of)g(link)o(ed)g(ob)r(jects,)i(a)e(p)q(oin)o(ter)h
(mistak)o(enly)d(considered)-34 977 y(as)h(a)h(ro)q(ot)f(ma)o(y)f(lead)
h(to)h(retain)f(an)h(ob)r(ject)g(and)f(consequen)o(tly)i(all)d(ob)r
(jects)j(connected)g(to)f(it,)f(for)g(a)g(quite)h(signi\014can)o(t)-34
1026 y(o)o(v)o(erall)e(amoun)o(t)f(of)i(space.)23 b(In)15
b(the)h(section)g(on)f(p)q(erformance)g(w)o(e)h(rep)q(ort)g(ab)q(out)f
(cases)i(when)f(this)f(phenomenon)g(had)-34 1076 y(quite)f(visible)f
(e\013ects.)28 1126 y(Moreo)o(v)o(er,)e(a)f(mark-and-sw)o(eep)g
(collector)g(ma)o(y)e(b)q(e)j(sub)r(ject)h(to)e(memory)e(fragmen)o
(tation,)g(esp)q(ecially)j(if)e(the)i(program)-34 1176
y(uses)k(ob)r(jects)g(of)e(man)o(y)f(di\013eren)o(t)j(sizes)g([21)o(].)
-34 1292 y Fd(10.1)55 b(Using)19 b(the)f Fo(MarkAndSwe)o(ep)d
Fd(Heap)-34 1368 y Fk(The)20 b Fg(MarkAndSweep)d Fk(heap)j(is)g(implem)
o(en)o(ted)e(as)i(a)f(deriv)o(ed)h(class)g(of)g Fg(CmmHeap)p
Fk(.)33 b(Unlik)o(e)20 b(other)g(CMM)g(heaps,)h(the)-34
1418 y Fg(MarkAndSweep)14 b Fk(heap)j(is)f(capable)h(of)f(recycling)h
(immediately)c(memory)i(released)j(with)e Fg(delete)p
Fk(.)25 b(Programmers)15 b(are)-34 1468 y(not)k(encouraged)i(to)f(use)g
Fg(delete)p Fk(,)f(since)i(its)f(use)g(is)g(often)f(error)i(prone)f
(and)g(in)f(a)g(sense)j(con)o(tradictory)e(with)f(the)-34
1518 y(adoption)13 b(of)h(a)g(garbage)f(collector.)20
b(Nev)o(ertheless)c(using)e Fg(delete)p Fk(,)f(when)i(appropriate,)e
(ma)o(y)g(dela)o(y)g(the)i(in)o(v)o(o)q(cation)e(of)-34
1568 y(the)h(garbage)f(collector.)18 b(If,)12 b(for)h(instance,)h(one)f
(kno)o(ws)g(that)h(a)f(large)g(data)g(structure)i(is)e(no)g(longer)g
(needed,)h(destro)o(ying)-34 1618 y(it)f(will)g(mak)o(e)f(its)i(memory)
d(immediately)g(a)o(v)n(ailable.)28 1667 y(The)k Fg(MarkAndSweep)d
Fk(collector)j(is)f(automatically)e(in)o(v)o(ok)o(ed)h(when)i(an)g
(allo)q(cation)e(request)j(cannot)e(b)q(e)i(satis\014ed)f(b)o(y)-34
1717 y(the)f(MarkAndSw)o(eep)h(heap.)j(The)d(collector)f(can)g(also)f
(b)q(e)i(called)e(explicitly)g(with:)9 1807 y Fg(heap->collect\(\);)28
1897 y Fk(Also)h(ob)r(jects)h(allo)q(cated)e(in)h(the)g(MSW)g(heap)g(m)
o(ust)f(b)q(elong)g(to)h(a)g(sub)q(class)h(of)e Fg(CmmObject)p
Fk(.)28 1947 y(As)h(usual,)e(y)o(ou)h(can)g(select)h(the)g
Fg(MarkAndSweep)d Fk(as)i(the)g(default)g(heap)g(b)o(y)g(setting)h(the)
g(static)f(v)n(ariable)f Fg(Cmm::heap)p Fk(:)9 2036 y
Fg(Cmm::heap)20 b(=)i(Cmm::theMSHeap;)9 2136 y(//)g(BigNum)13
b Fj(is)i(a)g(sub)n(class)g(of)22 b Fg(CmmObject,)12
b Fj(so)22 b Fg(b)15 b Fj(wil)r(l)f(b)n(e)g(al)r(lo)n(c)n(ate)n(d)h(in)
g(the)22 b Fg(MarkAndSweep)12 b Fj(he)n(ap)p Fg(.)9 2186
y(BigNum*)21 b(b)g(=)h(new)f(BigNum\("1231345345)o(3453)o(45"\);)-34
2302 y Fd(10.2)55 b(Implemen)n(tati)o(on)16 b(Issues)-34
2378 y Fk(The)f Fg(MarkAndSweep)d Fk(collector)j(handles)g(di\013eren)o
(tly)g(small)d(and)i(large)h(ob)r(jects.)21 b(A)15 b(small)d(ob)r(ject)
k(is)e(an)h(ob)r(ject)g(whose)-34 2428 y(size)h(is)f(less)h(than)g(256)
e(b)o(ytes.)24 b(Since)16 b(man)o(y)d(applications)i(use)h(mainly)d
(small)g(ob)r(jects)j(\(for)f(instance)i(list)e(no)q(des\),)h(the)-34
2478 y(allo)q(cator)d(tries)h(to)g(optimize)e(allo)q(cation)h(and)g
(deallo)q(cation)g(for)h(suc)o(h)g(ob)r(jects.)28 2528
y(The)h Fg(MarkAndSweep)c Fk(requests)16 b(pages)f(to)f(the)g(lo)o(w)f
(lev)o(el)h(page)g(allo)q(cator.)k(Eac)o(h)c(page)g(is)g(mark)o(ed)f
(as)h(either)h Fj(single)p Fk(,)-34 2578 y(when)e(used)g(for)g(small)d
(ob)r(jects,)k(or)e Fj(gr)n(oup)n(e)n(d)p Fk(.)18 b(If)12
b(an)h(ob)r(ject)g(is)g(bigger)f(than)h(the)g(page)g(size,)g(sev)o
(eral)g(con)o(tiguous)f Fj(gr)n(oup)n(e)n(d)-34 2627
y Fk(pages)i(are)g(joined)g(together)h(to)e(store)i(the)g(ob)r(ject.)28
2677 y(Eac)o(h)d Fj(single)g Fk(page)g(con)o(tains)f(only)h(ob)r(jects)
h(of)e(the)h(same)f(size.)18 b(In)12 b(this)g(w)o(a)o(y)f(w)o(e)i(can)f
(a)o(v)o(oid)e(storing)i(size)g(information)-34 2727
y(for)k(eac)o(h)i(ob)r(ject)g(\(since)g(the)g(size)f(information)d(is)j
(stored)h(in)f(the)h(page)f(header\))h(and)f(tra)o(v)o(ersing)g(a)g
Fj(single)g Fk(page,)g(for)-34 2777 y(example)12 b(during)i(the)g(sw)o
(eep)h(phase,)f(can)h(b)q(e)f(done)g(quic)o(kly)m(.)919
2901 y(13)p eop
%%Page: 14 14
14 13 bop 28 161 a Fk(The)18 b Fg(MarkAndSweep)d Fk(collector)i(k)o
(eeps,)i(for)e(eac)o(h)h(page,)g(a)f(free)h(list)f(linking)f(all)g
(free)i(ob)r(jects)h(within)e(that)g(page.)-34 211 y(Suc)o(h)d(lists)g
(are)g(up)q(dated)h(when)f(an)g(ob)r(ject)g(is)g(allo)q(cated)g(or)f
(released.)28 260 y(The)k Fg(MarkAndSweep)d Fk(is)i(able)g(to)g
(recycle)i(a)e(page)g(for)g(further)h(allo)q(cations)f(when)g(all)g(ob)
r(jects)h(in)f(that)g(page)h(ha)o(v)o(e)-34 310 y(b)q(een)e(released.)k
(F)m(or)14 b(example)e(a)i Fj(single)f Fk(page)h(ma)o(y)e(b)q(e)j
(reused)g(as)f(a)g(part)g(of)f(a)h Fj(gr)n(oup)n(e)n(d)g
Fk(set)h(of)e(pages.)28 360 y(The)18 b(collection)f(algorithm)f
(consists)i(of)f(a)h(mark)e(and)i(a)f(sw)o(eep)i(phase.)30
b(During)17 b(the)h(mark)f(phase)h(liv)o(e)f(ob)r(jects,)-34
410 y(starting)d(from)e(the)i(ro)q(ot)g(set,)h(are)f(mark)o(ed.)j(When)
d(the)h(sw)o(eep)g(phase)f(starts)h(an)o(y)f(non)f(mark)o(ed)g(ob)r
(ject)i(is)f(released:)19 b(in)-34 460 y(the)14 b(case)g(of)f(a)f
(small)f(ob)r(ject,)j(it)f(is)g(added)h(to)f(the)h(free)g(list)f(of)f
(the)i(page;)f(otherwise)h(the)g(corresp)q(onding)g(set)h(of)d
Fj(gr)n(oup)n(e)n(d)-34 510 y Fk(pages)j(is)g(added)g(to)g(the)g(set)h
(of)e(a)o(v)n(ailable)f(pages.)21 b(The)15 b(same)f(happ)q(ens)i(to)f
Fj(single)g Fk(pages)g(whic)o(h)g(are)g(completely)f(freed)-34
559 y(in)f(the)i(sw)o(eep)g(phase.)28 609 y(During)d(the)g(mark)f
(phase)i(the)g Fg(MarkAndSweep)c Fk(collector)k(also)e(sp)q(ecially)h
(marks)f(pages)i(whic)o(h)f(con)o(tain)g(at)g(least)g(one)-34
659 y(liv)o(e)h(ob)r(ject.)19 b(During)13 b(the)h(sw)o(eep)h(phase)g
(non)e(mark)o(ed)g(pages)h(can)g(b)q(e)h(imm)o(ediately)c(released)k
(without)e(scanning)h(them)-34 709 y(since)f(they)g(do)f(not)g(con)o
(tain)g(liv)o(e)f(ob)r(jects.)19 b(Suc)o(h)13 b(an)f(optimization)d(is)
k(more)e(e\013ectiv)o(e)j(with)e(applications)f(that)h(pro)q(duce)-34
759 y(large)h(amoun)o(ts)g(of)g(small)f(garbage)h(ob)r(jects.)-34
875 y Fd(10.3)55 b(Managing)20 b(T)-5 b(emp)r(orary)16
b(Ob)s(jects)j(with)f(the)h Fo(MarkAndSw)o(ee)o(p)d Fd(Heap)-34
951 y Fk(The)f Fg(MarkAndSweep)d Fk(heap)j(pro)o(vides)g(also)f(supp)q
(ort)i(for)e(the)h(allo)q(cation)e(of)h(temp)q(orary)g(ob)r(jects.)22
b(T)m(emp)q(orary)13 b(ob)r(jects)-34 1001 y(are)h(ob)r(jects)h(that)f
(can)g(b)q(e)h(quic)o(kly)e(released)i(at)f(a)f(certain)i(p)q(oin)o(t)e
(without)h(a)f(mark)f(phase.)28 1051 y(The)21 b(adv)n(an)o(tage)e(of)g
(using)h Fg(MarkAndSweep)e Fk(temp)q(orary)h(ob)r(jects)j(is)e(that)g
(if)f(the)i(heap)f(gro)o(ws)g(to)q(o)g(m)o(uc)o(h)f(when)-34
1101 y(allo)q(cating)8 b(temp)q(orary)h(ob)r(jects)i(then)f(the)h
Fg(MarkAndSweep)c Fk(collector)j(can)g(b)q(e)g(in)o(v)o(ok)o(ed.)16
b(This)10 b(constitutes)h(an)f(alternativ)o(e)-34 1151
y(to)j(the)i(use)g(of)e Fg(TempHeap)f Fk(whic)o(h)i(do)q(es)h(not)e
(require)i(supplying)e(metho)q(ds)h(for)f Fg(traverse)p
Fk(.)28 1200 y(Nonetheless)j(the)g Fg(TempHeap)d Fk(has)i(b)q(etter)h
(p)q(erformance)f(than)f(the)i Fg(MarkAndSweep)c Fk(in)i(reclaiming)f
(temp)q(orary)h(ob-)-34 1250 y(jects.)37 b(In)19 b(fact)h(the)h
Fg(TempHeap)d Fk(uses)j(memory)c(in)i(a)h(stac)o(k-lik)o(e)f(fashion,)h
(while)f(the)i(allo)q(cation)d(pro)q(cedure)k(of)d(the)-34
1300 y Fg(MarkAndSweep)11 b Fk(needs)k(to)f(p)q(erform)f(more)g(b)q(o)q
(okk)o(eeping)28 1350 y(The)i Fg(MarkAndSweep)e Fk(collector)i
(reclaims)f(temp)q(orary)g(ob)r(jects)j(b)o(y)d(distinguishing)g(b)q
(et)o(w)o(een)j(temp)q(orary)d(and)h(p)q(er-)-34 1400
y(manen)o(t)d(pages:)19 b(all)13 b(temp)q(orary)g(pages)h(can)g(b)q(e)h
(quic)o(kly)e(reclaimed)f(when)j(appropriate.)28 1450
y(Note)f(that)g(b)q(oth)g Fg(TempHeap)e Fk(and)i(the)h
Fg(MarkAndSweep)c Fk(migh)o(t)h(b)q(e)i(used)h(together)g(within)e(the)
i(same)e(application.)-34 1566 y Fd(10.4)55 b(F)-5 b(acilities)18
b(of)g(the)h Fo(MarkAndSw)o(ee)o(p)-34 1642 y Fk(The)e
Fg(MarkAndSweep)d Fk(collector)j(also)g(pro)o(vides)g(a)f(lo)o(w)g(lev)
o(el)h(in)o(terface)g(that)g(can)g(b)q(e)h(used)f(b)o(y)g(C)g
(programs.)25 b(T)m(o)16 b(this)-34 1692 y(aim,)11 b(the)j(follo)o
(wing)e(functions)i(are)g(a)o(v)n(ailable:)70 1784 y
Fg(mswAlloc)e Fk(can)i(b)q(e)g(used)h(in)f(place)g(of)f
Fg(malloc)70 1867 y(mswFree)f Fk(in)h(place)h(of)g Fg(free)70
1950 y(mswRealloc)d Fk(in)j(place)g(of)f Fg(realloc)70
2033 y(mswCollect)e Fk(to)j(in)o(v)o(ok)o(e)f(the)i(collector.)28
2124 y(F)m(urthermore,)20 b(the)g Fg(MarkAndSweep)c Fk(collector)k
(includes)g(a)f(heap)g(c)o(hec)o(king)h(utilit)o(y)d(that)j(can)f(b)q
(e)h(used)g(to)f(trac)o(k)-34 2174 y(memory)11 b(leaks.)18
b(More)c(information)d(ab)q(out)j(ho)o(w)g(to)f(use)i(this)f(feature)h
(can)f(b)q(e)g(found)g(in)f(the)i(o\016cial)d(do)q(cumen)o(tation.)-34
2311 y Fl(11)69 b(An)23 b(Example)d(of)j(Customisati)o(on)-34
2402 y Fk(W)m(e)15 b(presen)o(t)h(here)h(an)e(example)f(of)g(the)i
(kind)f(of)f(customisation)g(of)h(the)h(collector)f(whic)o(h)g(is)g
(feasible)g(with)g(the)h(CMM.)-34 2452 y(The)j(solution)f(is)h(fairly)f
(simple)f(to)i(realise)g(with)g(the)g(supp)q(ort)h(pro)o(vided)f(b)o(y)
g(the)g(CMM)g(and)g(pro)o(vides)g(signi\014can)o(t)-34
2502 y(p)q(erformance)14 b(impro)o(v)o(em)o(en)o(ts)e(as)i(rep)q(orted)
h(in)f(a)f(later)h(section.)919 2901 y(14)p eop
%%Page: 15 15
15 14 bop -34 161 a Fd(11.1)55 b(The)19 b(Case)g(Problem)-34
237 y Fk(The)13 b(Buc)o(h)o(b)q(erger)i(algorithm)10
b(is)j(an)g(algorithm)d(in)j(computer)f(algebra)h(that)g(computes)f
(the)i(Gr\177)-21 b(obner)13 b(basis)g(of)g(an)f(ideal)-34
287 y(of)17 b(p)q(olynomials,)e(with)j(a)f(tec)o(hnique)i(whic)o(h)f
(is)f(reminiscen)o(t)h(of)f(the)h(Kn)o(uth-Bendix)h(algorithm)c(for)i
(term)h(rewriting)-34 337 y(systems.)27 b(Quite)18 b(brie\015y)m(,)f
(the)h(algorithm)c(is)j(giv)o(en)g(a)g(set)g(of)g(m)o(ultiv)n(ariate)d
(p)q(olynomials,)h(and)h(it)h(m)o(ust)f(generate)j(its)-34
387 y(Gr\177)-21 b(obner)14 b(basis,)g(i.e.)j(the)e(set)g(of)e(the)h
(smallest)f(p)q(olynomials)e(according)j(to)g(a)f(certain)i(ordering,)e
(suc)o(h)i(that)f(an)o(y)g(of)f(the)-34 437 y(original)f(p)q(olynomial)
o(s)g(can)i(b)q(e)g(obtained)g(as)g(a)f(linear)h(com)o(bination)d(of)j
(its)f(elemen)o(ts.)28 487 y(Eac)o(h)j(step)h(of)e(the)h(algorithm)d
(tests)k(whether)g(one)f(candidate)g(p)q(olynomial)c
Fg(p)j Fk(is)h(a)f(com)o(bination)e(of)i(the)i(elemen)o(ts)-34
536 y(of)e(the)h(basis)f(computed)g(so)h(far,)f(the)h
Fg(simplifiers)p Fk(.)21 b(This)15 b(step)h(is)g(called)f(a)g
(reduction)h(since)h(it)e(rep)q(eatedly)h(tries)h(to)-34
586 y(simplify)9 b(the)k(p)q(olynomial)c(to)k(determine)f(whether)i(it)
e(reduces)i(to)f(zero.)18 b(If)12 b(the)h(resulting)g(p)q(olynomial)c
(is)j(not)g(zero,)i(it)e(is)-34 636 y(inserted)h(in)f(the)h(basis.)k
(Candidate)12 b(p)q(olynomials)d(are)k(pro)q(duced)h(b)o(y)e
Fg(Spolynomial)d Fk(for)j(eac)o(h)h(pair)f(of)f(simpli\014ers.)17
b(This)-34 686 y(and)12 b(the)g(fact)g(that)g(reduction)h(with)f(one)g
(simpli\014er)e(requires)k(rep)q(eating)e(simpli\014cations)e(with)i
(the)g(other)h(p)q(olynomials,)-34 736 y(accoun)o(t)j(for)f(the)g(exp)q
(onen)o(tial)g(space)i(gro)o(wth)e(in)g(the)h(computation,)d(whic)o(h)i
(stresses)k(hea)o(vily)14 b(man)o(y)f(systems)j(and)f(in)-34
785 y(particular)h(the)h(memory)e(managemen)o(t.)23 b(Sev)o(eral)17
b(real)g(problems)e(in)o(v)o(olv)o(e)h(w)o(eeks)h(of)f(computation)f
(and)i(memory)d(in)-34 835 y(the)g(order)h(of)e(gigab)o(ytes.)28
885 y(Here)i(is)f(a)f(fragmen)o(t)g(from)f(the)i(actual)g(co)q(de)h(p)q
(erforming)d(the)j(reduction)f(step)h(for)f(a)f(pair:)9
976 y Fg(Poly*)21 b(p)h(=)f(pair->SPolynomial\(\))o(;)9
1076 y(if)h(\(p->isZero\(\)\))d Ff(f)53 1126 y Fg(p)j(=)f(simplify\(p,)
f(simplifiers\);)53 1176 y(if)h(\(p->isZero\(\)\))97
1225 y(p)g(=)h(normalize\(p\);)9 1275 y Ff(g)28 1367
y Fk(The)14 b(relev)n(an)o(t)g(asp)q(ects)i(of)d(the)i(algorithm)c
(with)i(resp)q(ect)k(to)c(memory)f(managemen)o(t)f(are:)16
1458 y(1.)21 b(Large)12 b(amoun)o(ts)f(of)h(memory)d(are)k(allo)q
(cated)f(during)g Fg(simplify)f Fk(and)h(most)f(of)h(this)g(memory)e
(can)j(b)q(e)g(freed)g(at)f(the)70 1508 y(end)k(of)f(this)h(step.)24
b(The)16 b(only)f(data)h(to)f(b)q(e)i(preserv)o(ed)g(is)f(the)g
(simpli\014ed)e(p)q(olynomial)f(whic)o(h)i(m)o(ust)g(b)q(e)h(inserted)
70 1558 y(in)o(to)d(the)h(\014nal)f(basis.)16 1641 y(2.)21
b(In)13 b(man)o(y)f(cases)k Fg(simplify)c Fk(returns)j(a)f(zero)h(p)q
(olynomial)o(.)g(In)f(these)h(cases)h(no)d(memory)f(m)o(ust)h(b)q(e)h
(preserv)o(ed.)16 1724 y(3.)21 b(Since)16 b(the)h(complexit)o(y)d(of)i
(the)g(algorithm)e(is)i(exp)q(onen)o(tial,)g(the)g(amoun)o(t)f(of)g
(memory)f(allo)q(cated)h(b)o(y)h Fg(simplify)70 1773
y Fk(also)d(gro)o(ws)h(exp)q(onen)o(tially)f(with)g(the)i(size)f(of)g
(the)g(ideal.)-34 1890 y Fd(11.2)55 b(Solution)18 b(with)h(the)f(CMM)
-34 1966 y Fk(The)f(basic)g(idea)g(for)g(impro)o(ving)d(the)k(p)q
(erformance)f(of)f(memory)f(managemen)o(t)f(in)j(our)g(application)f(w)
o(as)g(to)h(iden)o(tify)-34 2016 y(p)q(ortions)12 b(of)f(the)i
(computation)d(where)j(ob)r(jects)g(with)f(only)f(limited)f(lifetime)g
(are)i(created.)19 b(If)12 b(w)o(e)g(could)g(segregate)h(these)-34
2066 y(ob)r(jects)j(from)e(the)i(rest,)h(it)e(w)o(ould)g(b)q(e)h(p)q
(ossible)g(to)f(reclaim)f(their)i(space)h(so)q(on)e(after)h(their)g
(lifetime)d(expires,)k(without)-34 2116 y(requiring)c(a)h(full)f
(collection.)28 2165 y(In)k(order)g(to)g(exploit)f(the)h(c)o
(haracteristics)h(of)e(the)i(Buc)o(h)o(b)q(erger)g(algorithm,)d(w)o(e)h
(adopt)h(t)o(w)o(o)f(di\013eren)o(t)i(heaps:)24 b(the)-34
2215 y(default)11 b(one)h(and)g(a)f(sp)q(ecial)h(one)h(for)e(this)h
(algorithm)d(\()p Fg(tempHeap)p Fk(,)h(lo)o(w)o(ercase)j(\\t"\),)e(an)h
(instance)g(of)g(the)g(class)g Fg(TempHeap)-34 2265 y
Fk(\(upp)q(ercase)k(\\T"\).)28 2315 y(Memory)c(is)h(usually)f(allo)q
(cated)g(inside)h(the)g(default)g(heap,)g(but)g(b)q(efore)g(calling)f
Fg(simplify)f Fk(the)i(heap)g(is)g(switc)o(hed)h(to)-34
2365 y(the)g Fg(tempHeap)p Fk(.)j(All)c(the)h(memory)d(allo)q(cated)j
(during)f Fg(simplify)g Fk(is)g(therefore)j(obtained)d(from)g(the)h
Fg(tempHeap)p Fk(.)28 2415 y(Notice)h(that)g(this)g(do)q(es)h(not)e
(require)i(an)o(y)f(c)o(hanges)g(to)g(an)o(y)f(of)g(the)i(remaining)d
(functions)i(in)f(the)h(application:)k(the)-34 2464 y(algebraic)14
b(op)q(erations)h(on)f(p)q(olynomials,)e(co)q(e\016cien)o(ts)j(etc.)22
b(are)15 b(unmo)q(di\014ed)e(and)i(use)g(the)g(standard)g
Fg(new)f Fk(op)q(erator)i(to)-34 2514 y(allo)q(cate)d(ob)r(jects.)28
2564 y(After)19 b(returning)g(from)e Fg(simplify)g Fk(w)o(e)i(switc)o
(h)g(bac)o(k)f(to)h(the)g(default)f(heap,)i(and)e(the)h(p)q(olynomial)c
(returned)21 b(b)o(y)-34 2614 y Fg(simplify)11 b Fk(is)h(copied)h(in)o
(to)f(the)h(default)f(heap.)18 b(A)o(t)13 b(this)g(p)q(oin)o(t)f(the)h
Fg(tempHeap)e Fk(con)o(tains)i(no)f(liv)o(e)g(data)g(and)h(can)f(b)q(e)
i(freed)-34 2664 y(with)f(a)h(single)f(op)q(eration)h(without)g(in)o(v)
o(olving)d(a)j(garbage)g(collection.)28 2713 y(Here)h(is)f(the)g(co)q
(de)h(again)e(augmen)o(ted)g(with)g(instructions)i(for)e(CMM)h(memory)e
(managemen)o(t.)919 2901 y(15)p eop
%%Page: 16 16
16 15 bop 9 161 a Fg(CmmHeap*)20 b(previousHeap)g(=)h(Cmm::heap;)42
b(//)36 b Fj(save)15 b(the)g(curr)n(ent)g(he)n(ap)9 211
y Fg(Cmm::heap)20 b(=)i(tempHeap;)325 b(//)36 b Fj(set)15
b(the)g(curr)n(ent)f(he)n(ap)i(to)21 b Fg(tempHeap)9
260 y(Poly*)g(p)h(=)f(pair->SPolynomial\(\))o(;)9 310
y(if)h(\(p->isZero\(\)\))d Ff(f)53 360 y Fg(p)j(=)f(simplify\(p,)f
(simplifiers\);)53 410 y(if)h(\(p->isZero\(\)\))97 460
y(p)g(=)h(normalize\(p\);)9 510 y Ff(g)9 559 y Fg(Cmm::heap)e(=)i
(previousHeap;)150 b(//)36 b Fj(r)n(estor)n(e)14 b(the)h(pr)n(evious)g
(he)n(ap)9 609 y Fg(p)22 b(=)g(new)f(Poly\(*p\);)325
b(//)36 b Fj(c)n(opy)22 b Fg(p)15 b Fj(out)g(of)g(the)22
b Fg(tempHeap)9 659 y(tempHeap->clear\(\);)302 b(//)36
b Fj(empty)15 b(the)22 b Fg(tempHeap)28 750 y Fk(Notice)16
b(that)f(the)h(cop)o(ying)e(constructor)j(for)e Fg(Poly)g
Fk(has)g(b)q(een)h(sp)q(ecialised)g(to)f(p)q(erform)g(a)g(deep)h(cop)o
(y)f(of)g(the)h(whole)-34 800 y(structure.)28 850 y(The)i(last)g(op)q
(eration)f(on)h(the)g Fg(tempHeap)e Fk(is)h(v)o(ery)h(fast:)26
b(it)17 b(in)o(v)o(olv)o(es)g(just)h(resetting)g(a)g(few)f(in)o(ternal)
h(v)n(ariables)f(to)-34 900 y(empt)o(y)c(the)h(heap.)28
950 y(This)g(simple)f(solution)g(has)h(the)h(dra)o(wbac)o(k)f(that)h
(the)f Fg(tempHeap)f Fk(migh)o(t)f(gro)o(w)i(to)q(o)g(m)o(uc)o(h)f
(during)g Fg(simplify)p Fk(.)18 b(This)-34 999 y(ma)o(y)12
b(happ)q(en)i(if)f(one)h(simpli\014cation)e(step)i(is)g(v)o(ery)g
(complex)f(and)h(lots)f(of)h(garbage)f(is)h(generated.)28
1049 y(So)h(w)o(e)h(m)o(ust)e(pro)o(vide)i(the)g(class)g
Fg(TempHeap)d Fk(with)i(its)h(o)o(wn)f(collector,)g(for)h(whic)o(h)f(w)
o(e)h(c)o(ho)q(ose)g(a)f(cop)o(ying)g(strategy)m(.)-34
1099 y(With)f(the)i(facilities)e(pro)o(vided)h(b)o(y)g(the)g(CMM,)g
(implemen)o(ting)d(this)j(collector)g(turns)h(out)f(to)g(b)q(e)h(a)f
(fairly)e(simple)h(task.)-34 1149 y(The)g Fg(TempHeap)e
Fk(manages)g(t)o(w)o(o)h(semispaces)h(of)f(v)n(ariable)f(size,)i
(consisting)f(of)g(series)i(of)e(con)o(tiguous)g(blo)q(c)o(ks)h(of)f
(memory)m(.)-34 1199 y(The)h(collector)h(just)f(copies)h(the)f(ro)q
(ots)h(in)o(to)e Fg(toSpace)p Fk(,)f(and)i(then)h(scans)g(the)g
Fg(toSpace)d Fk(further)j(cop)o(ying)f(in)o(to)f Fg(toSpace)-34
1248 y Fk(ob)r(jects)i(reac)o(hable)f(from)e(those)j(ro)q(ots.)28
1298 y(Here)g(is)f(the)g(co)q(de)h(for)f(the)g(collector:)-34
1390 y Fg(TempHeap::collec)o(t\(\))-34 1439 y Ff(f)9
1489 y Fg(CmmObject*)20 b(objPtr;)9 1539 y(//)37 b Fj(che)n(ck)15
b(that)g(it)f(is)h(worth)f(c)n(ol)r(le)n(cting)9 1589
y Fg(if)22 b(\(fromSpace->curr)o(ent)d(<)i(size)g(*)h(0.8\))53
1639 y(return;)9 1688 y(//)37 b Fj(new)14 b(obje)n(cts)h(ar)n(e)g(al)r
(lo)n(c)n(ate)n(d)f(in)22 b Fg(fromSpace)9 1738 y(//)37
b Fj(swap)14 b(semisp)n(ac)n(es)h(b)n(efor)n(e)g(c)n(opying)9
1788 y Fg(swap\(fromSpace,)k(toSpace\);)9 1838 y(roots.scan\(\);)368
b(//)36 b Fj(c)n(opy)16 b(al)r(l)e(r)n(o)n(ots)9 1888
y Fg(objPtr)21 b(=)g(fromSpace->bottom\(\);)9 1938 y(while)g(\(objPtr)f
(<)i(fromSpace->current)o(\(\)\))c Ff(f)75 1987 y Fg(objPtr->traverse)o
(\(\);)75 2037 y(objPtr)i(=)i(objPtr->next\(\);)40 b(//)d
Fj(advanc)n(e)16 b(to)e(next)i(obje)n(ct)9 2087 y Ff(g)9
2137 y Fg(toSpace->reset\(\);)9 2187 y(expand\(\);)456
b(//)36 b Fj(exp)n(and)16 b(he)n(ap)g(if)e(ne)n(e)n(de)n(d)-34
2236 y Ff(g)28 2328 y Fk(The)g(use)h(of)e(the)i(collector)f(for)g(the)g
Fg(TempHeap)e Fk(is)i(feasible)g(and)f(e\013ectiv)o(e)j(in)d(our)h
(case)h(b)q(ecause:)28 2411 y Ff(\017)21 b Fk(whic)o(h)13
b(ob)r(jects)i(are)g(still)e(in)g(use)i(b)o(y)e Fg(simplify)g
Fk(is)g(kno)o(wn;)28 2494 y Ff(\017)21 b Fk(no)15 b(p)q(oin)o(ters)g
(to)h(ob)r(jects)g(in)f(the)h Fg(TempHeap)d Fk(ha)o(v)o(e)j(b)q(een)g
(handed)g(out)f(to)g(pro)q(cedures)j(whic)o(h)d(migh)o(t)e(store)j
(them)70 2544 y(elsewhere.)28 2627 y(In)e(fact)g(the)g(ro)q(ots)h(in)o
(to)e(the)h Fg(TempHeap)e Fk(are)j(limited)c(to)j(just)g(the)h(p)q
(olynomial)10 b(b)q(eing)k(simpli\014ed.)28 2676 y(Giv)o(en)e(these)i
(assumptions,)d(b)q(efore)j(starting)e(the)h(simpli\014cation)d(w)o(e)j
(register)h(as)f(ro)q(ots)g(for)f(the)h Fg(TempHeap)e
Fk(the)i(t)o(w)o(o)-34 2726 y(v)n(ariables)g(whic)o(h)i(refer)g(to)g
(ob)r(jects)g(used)g(throughout)g Fg(simplify)p Fk(:)i(the)e(v)n
(ariable)f(con)o(taining)f(the)i(curren)o(t)h(p)q(olynomial)-34
2776 y(and)d(the)i(one)f(con)o(taining)f(the)h(curren)o(t)i(monom)o
(ial)o(.)919 2901 y(16)p eop
%%Page: 17 17
17 16 bop 28 161 a Fk(After)15 b(eac)o(h)h(reduction)f(step,)g(garbage)
g(collection)f(on)g(the)i Fg(tempHeap)d Fk(is)h(in)o(v)o(ok)o(ed.)20
b(Ho)o(w)o(ev)o(er)15 b(a)f(collection)h(is)f(e\013ec-)-34
211 y(tiv)o(ely)i(p)q(erformed)g(only)g(when)h(the)h(p)q(ercen)o(tage)g
(of)e(space)i(left)f(in)f(the)h(heap)g(is)g(b)q(elo)o(w)g(a)f(certain)h
(threshold.)28 b(In)16 b(this)-34 260 y(case,)i(the)g(garbage)f
(collector)g(visits)g(the)h(t)o(w)o(o)f(registered)i(ro)q(ots)e(and)g
(copies)h(all)e(ob)r(jects)i(reac)o(hable)g(from)d(them.)28
b(In)-34 310 y(practice)13 b(the)h(curren)o(t)g(p)q(olynomial)9
b(and)j(the)i(curren)o(t)g(monom)o(ial)9 b(are)k(copied)g(in)o(to)f
Fg(toSpace)p Fk(.)k(A)o(t)c(the)i(start)f(of)f(the)h(next)-34
360 y(reduction)h(cycle)h(a)f(whole)f(semispace)h(is)g(emptied)f(and)h
(a)o(v)n(ailable)d(for)j(further)h(allo)q(cation.)28
410 y(Here)i(is)f(a)g(sk)o(etc)o(h)h(of)f(the)h(co)q(de,)g(where)g
Fg(SL->first)d Fk(accesses)19 b(the)d(\014rst)h(elemen)o(t)f(of)f(the)i
(list)f(of)f(p)q(olynomials)e Fg(SL)p Fk(,)-34 460 y
Fg(SL->next)j Fk(accesses)21 b(the)d(rest)h(of)f(suc)o(h)h(list)e(and)h
Fg(simplifier->head)c Fk(selects)20 b(the)f(head)f(monomi)o(al)d(of)i
(p)q(olynomial)-34 510 y Fg(simplifier)p Fk(:)-34 601
y Fg(Poly*)k(simplify\(Poly*)d(p,)k(PolyList)e(&simplifiers\))-34
651 y Ff(f)9 700 y Fg(if)i(\(simplifiers)d(==)i(NULL\))53
750 y(return)f(p;)9 800 y(CurrentPolynomial)f(=)i(p;)9
850 y(CurrentMonomial)e(=)j(*p;)9 900 y(//)37 b Fj(r)n(e)n(gister)13
b(the)i(r)n(o)n(ots)f(into)h(this)g(he)n(ap)9 950 y Fg
(tempHeap->roots.set)o(\(&Cur)o(rentP)o(olyno)o(mial)o(\);)9
999 y(tempHeap->roots.set)o(\(&Cur)o(rentM)o(onomi)o(al\);)9
1099 y(while)21 b(\(CurrentMonomial->)o(isZer)o(o\(\)\))d
Ff(f)97 1149 y Fg(bool)i(reduced)h(=)g(false;)97 1199
y(//)36 b Fj(iter)n(ate)14 b(thr)n(ough)h(the)g(list)f(of)21
b Fg(simplifiers)97 1248 y(PolyList)f(SL;)97 1298 y(for)h(\(SL)g(=)g
(simplifiers;)f(SL)h(!=)h(NULL;)e(SL)i(=)f(SL->next\))f
Ff(f)184 1348 y Fg(Poly*)g(simplifier)g(=)i(&SL->first;)184
1448 y(if)f(\(divisible\(Current)o(Monom)o(ial,)d(simplifier->head\)\))
g Ff(f)271 1498 y Fg(CurrentMonomial)h(=)i(reduce\(simplifier\))o(;)271
1597 y(tempHeap->collect)o(\(\);)84 b(//)36 b Fj(invoke)16
b(the)e(c)n(ol)r(le)n(ctor)271 1647 y Fg(reduced)20 b(=)i(true;)271
1697 y(break;)64 b(//)36 b Fj(r)n(estart)14 b(r)n(e)n(ductions)227
1747 y Ff(g)140 1796 y(g)97 1846 y Fg(if)21 b(\(!reduced\))162
1896 y(CurrentMonomial)e(=)i(&CurrentMonomial->)o(next;)53
1946 y Ff(g)9 1996 y Fg(//)37 b Fj(unr)n(e)n(gister)14
b(the)h(r)n(o)n(ots)9 2045 y Fg(tempHeap->roots.uns)o(et\(&C)o(urren)o
(tPoly)o(nomi)o(al\);)9 2095 y(tempHeap->roots.uns)o(et\(&C)o(urren)o
(tMono)o(mial)o(\);)9 2145 y(return)21 b(CurrentPolynomial)o(;)-34
2195 y Ff(g)-34 2332 y Fl(12)69 b(Extending)23 b(the)f(F)-6
b(ramew)n(ork)-34 2423 y Fk(This)17 b(section)g(illustrates)g(ho)o(w)g
(the)g(CMM)g(framew)o(ork)e(can)i(b)q(e)h(extended)g(b)o(y)f(implemen)o
(ting)c(new)18 b(heaps)f(as)g(classes)-34 2473 y(deriv)o(ed)d(from)e
Fg(CmmHeap)p Fk(.)17 b(W)m(e)c(describ)q(e)j(the)e(mec)o(hanism)e
(through)i(an)g(example.)-34 2589 y Fd(12.1)55 b(The)19
b Fo(TempHeap)-34 2666 y Fk(W)m(e)12 b(presen)o(t)h(here)h(a)d
(simpli\014ed)g(v)o(ersion)h(the)h(actual)f Fg(TempHeap)e
Fk(supplied)i(with)g(the)h(CMM,)f(where)h(t)o(w)o(o)f(semispaces)g(are)
-34 2716 y(used)j(whic)o(h)e(are)i(just)f(\014xed)g(size)h(blo)q(c)o
(ks)f(of)f(con)o(tiguous)g(memory)m(.)919 2901 y(17)p
eop
%%Page: 18 18
18 17 bop 28 161 a Fk(First)13 b(w)o(e)g(de\014ne)h(the)f
Fg(TempHeap)e Fk(class)i(as)g(a)f Fg(CmmHeap)f Fk(consisting)i(of)f(t)o
(w)o(o)g(areas)i(whic)o(h)e(implemen)o(t)e(the)j Fg(fromSpace)-34
211 y Fk(and)g(the)i Fg(toSpace)d Fk(of)i(the)g(collector:)-34
302 y Fg(class)21 b(TempHeap:)e(public)i(CmmHeap)-34
352 y Ff(f)9 402 y Fg(public:)31 451 y(TempHeap\(int\);)9
551 y(private:)31 601 y(char)g(*fromSpace,)f(*toSpace;)31
651 y(char)h(*fromTop,)f(*toTop;)31 700 y(int)h(size;)31
750 y(CmmObject*)f(copy\(CmmObject*\);)-34 800 y Ff(g)p
Fg(;)28 891 y Fk(The)14 b(creation)h(of)e(a)g Fg(TempHeap)g
Fk(in)o(v)o(olv)o(es)g(requesting)h(t)o(w)o(o)g(groups)g(of)f(pages)h
(for)g(the)g(t)o(w)o(o)g(spaces:)-34 974 y Fg(TempHeap::TempHe)o
(ap\(in)o(t)19 b(bytes\))-34 1024 y Ff(f)31 1074 y Fg(size)i(=)h
(bytes;)31 1124 y(fromSpace)e(=)i(allocatePages\(by)o(tes)d(/)i
(BYTESperPAGE,)e(this\);)31 1174 y(toSpace)h(=)i(allocatePages\(byte)o
(s)d(/)j(BYTESperPAGE,)d(this\);)-34 1224 y Ff(g)28 1307
y Fk(Allo)q(cating)13 b(memory)e(for)j(an)f(ob)r(ject)i(consists)g
(just)f(in)f(adv)n(ancing)g(the)i(index)f Fg(fromSpace)p
Fk(:)-34 1390 y Fg(CmmObject*)19 b(TempHeap::alloc\(int)f(size\))-34
1439 y Ff(f)31 1489 y Fg(int)j(words)g(=)h(BYTEStoWORDS\(siz)o(e\);)31
1539 y(if)g(\(words)e(>)i(size)f(-)g(fromTop\))f(error\("No)g(more)h
(memory"\);)31 1589 y(fromTop)f(+=)i(words;)31 1639 y(return)f
(\(CmmObject*\)\(fro)o(mSpac)o(e)e(+)j(fromTop\);)-34
1688 y Ff(g)28 1771 y Fk(The)c(collector)g(uses)h(the)g(ro)q(ot)f(set)g
(to)g(tra)o(v)o(erse)h(the)g(ro)q(ots.)30 b(After)18
b(ha)o(ving)f(mo)o(v)o(ed)f(to)i Fg(toSpace)e Fk(all)h(the)h(ob)r
(jects)-34 1821 y(reac)o(hable)e(from)f(the)h(ro)q(ots,)h(it)e(tra)o(v)
o(erses)j(those)f(ob)r(jects)g(in)f(order)g(to)g(mo)o(v)o(e)f(all)f
(further)j(reac)o(hable)g(ob)r(jects.)25 b(As)17 b(the)-34
1871 y(\014nal)c(step)i(the)f(collector)h(exc)o(hanges)f(the)h(roles)f
(of)f Fg(fromSpace)f Fk(and)i Fg(toSpace)p Fk(.)28 1921
y(W)m(e)g(ha)o(v)o(e)f(sho)o(wn)h(earlier)g(the)h(co)q(de)f(for)g
Fg(TempHeap::collect)o Fk(.)28 1971 y(The)f(co)q(de)h(relies)f(on)f
(supp)q(ort)h(pro)o(vided)g(b)o(y)f(class)h Fg(CmmObject)e
Fk(for)h(skipping)g(from)f(one)i(ob)r(ject)g(to)g(the)g(next)g(consec-)
-34 2021 y(utiv)o(e)g(one)i(in)e(memory)e(\()p Fg(next)p
Fk(\))j(and)f(b)o(y)h(the)g(user)h(in)f(the)g(form)e(of)h(a)h
Fg(traverse)e Fk(metho)q(d)h(for)h(eac)o(h)g(class)g(of)f(collectable)
-34 2070 y(ob)r(jects.)28 2120 y(The)g(tra)o(v)o(ersal)g(step)g(p)q
(erforms)f(sca)o(v)o(enging)h(of)e(ob)r(jects)j(b)o(y)f(means)e(of)h
(metho)q(d)g Fg(scavenge)p Fk(.)k(Eac)o(h)d(class)g(of)f(heap)g(has)-34
2170 y(its)i(o)o(wn)g(strategy)h(for)g(sca)o(v)o(enging)f(ob)r(jects:)
20 b(for)14 b(a)g(cop)o(ying)g(collector)h(the)g(strategy)g(is)f(to)h
(cop)o(y)f(the)h(ob)r(ject,)g(while)f(for)-34 2220 y(a)f(mark-and-sw)o
(eep)g(collector)i(it)e(will)f(consists)j(in)f(marking)e(the)i(ob)r
(ject.)28 2270 y(The)g(sp)q(eci\014c)i(action)d(required)i(for)f(sca)o
(v)o(enging)f(ob)r(jects)i(in)f(the)g Fg(TempHeap)e Fk(is)i(as)g(follo)
o(ws:)-34 2361 y Fg(void)21 b(TempHeap::scaven)o(ge\(Cm)o(mObje)o(ct**)
d(ptr\))-34 2411 y Ff(f)9 2461 y Fg(CmmObject*)i(p)i(=)f
(basePointer\(\(GCP\)*p)o(tr\);)62 b(//)36 b Fj(\014nd)16
b(the)f(start)f(of)h(the)g(obje)n(ct)9 2510 y Fg(int)22
b(offset)e(=)i(\(char*\)*ptr)d(-)j(\(char*\)p;)9 2560
y(if)g(\(!inside\(p\)\))53 2610 y(visit\(p\);)325 b(//)36
b Fj(tr)n(averse)14 b(obje)n(cts)h(in)g(other)g(he)n(aps)9
2660 y Fg(else)21 b(if)h(\(FORWARDED\(p\)\))84 b(//)36
b Fj(up)n(date)16 b(p)n(ointers)e(to)h(forwar)n(de)n(d)f(obje)n(cts)53
2710 y Fg(*ptr)21 b(=)g(\(CmmObject*\)\(\(char*\))o(p->Ge)o(tFor)o
(ward\()o(\))e(+)j(offset\);)9 2759 y(else)f Ff(f)919
2901 y Fk(18)p eop
%%Page: 19 19
19 18 bop 747 190 a Fk(T)m(able)13 b(1:)18 b(Benc)o(hmarks)p
425 237 1031 2 v 424 337 2 100 v 446 305 a Fc(Benc)o(h)p
619 337 V 65 w(Bartlett)p 828 337 V 39 w(CMM)p 995 337
V 43 w(CMM-TH)p 1248 337 V 1270 265 a(Impro)o(v.)1332
317 y(\045)p 1455 337 V 425 338 1031 2 v 424 403 2 65
v 446 384 a Fk(k)n(atsura5)p 619 403 V 135 w(3.59)p 828
403 V 91 w(3.79)p 995 403 V 178 w(3.17)p 1248 403 V 164
w(17)p 1455 403 V 424 468 V 446 448 a(cohn1)p 619 468
V 162 w(12.45)p 828 468 V 91 w(8.68)p 995 468 V 178 w(6.85)p
1248 468 V 164 w(22)p 1455 468 V 424 532 V 446 513 a(cyclic6)p
619 532 V 147 w(37.58)p 828 532 V 71 w(28.78)p 995 532
V 157 w(19.77)p 1248 532 V 163 w(32)p 1455 532 V 424
597 V 446 578 a(v)n(alla)p 619 597 V 182 w(56.96)p 828
597 V 71 w(46.43)p 995 597 V 177 w(34.3)p 1248 597 V
164 w(27)p 1455 597 V 424 662 V 446 643 a(k)n(atsura6)p
619 662 V 93 w(356.41)p 828 662 V 50 w(258.45)p 995 662
V 136 w(211.58)p 1248 662 V 163 w(18)p 1455 662 V 425
664 1031 2 v 53 823 a Fg(CmmObject*)i(newObj)g(=)i(copy\(p\);)53
873 y(p->SetForward\(new)o(Obj\);)53 923 y(*ptr)f(=)g
(\(CmmObject*\)\(\(char*\))o(newOb)o(j)e(+)i(offset\);)9
973 y Ff(g)-34 1022 y(g)28 1105 y Fk(Unless)16 b(the)g(ob)r(ject)h(had)
e(b)q(een)h(copied)g(already)m(,)e(it)h(is)h(copied)f(in)g(the)h(next)g
(semispace)g(and)f(a)g(forw)o(arding)f(p)q(oin)o(ter)-34
1155 y(left)f(with)h(the)g(original.)-34 1291 y Fl(13)69
b(P)n(erformance)-34 1382 y Fk(There)16 b(are)g(sev)o(eral)f(questions)
h(on)f(p)q(erformance)g(whic)o(h)g(w)o(e)h(tried)g(to)f(answ)o(er)g
(through)h(b)q(enc)o(hmarking:)j(whether)e(the)-34 1432
y(CMM,)g(whic)o(h)h(uses)i(C++)e(to)g(allo)o(w)f(customization,)g
(loses)h(in)g(p)q(erformance)g(with)g(resp)q(ect)i(to)e(a)g(collector)g
(written)-34 1482 y(purely)c(in)f(C;)g(ho)o(w)h(a)f(cop)o(ying)g
(collector)h(compares)g(with)f(a)h(mark-and-sw)o(eep)f(collector;)g
(what)h(b)q(ene\014ts)h(a)f(sp)q(ecialised)-34 1531 y(collector)g(pro)o
(vides;)g(whether)h(sync)o(hronising)f(the)g(collector)g(with)g(the)g
(m)o(utator)f(o\013ers)i(an)o(y)e(b)q(ene\014ts.)28 1581
y(The)k(Buc)o(h)o(b)q(erger)i(algorithm)13 b(app)q(ears)18
b(quite)e(suitable)h(for)f(b)q(enc)o(hmarking)f(since)j(it)e(pro)o
(vides)g(a)h(wide)f(v)n(ariet)o(y)g(of)-34 1631 y(b)q(eha)o(viours)g
(arising)g(from)e(di\013eren)o(t)k(input)e(data:)23 b(from)14
b(cases)k(where)f(quite)g(large)f(ob)r(jects)h(are)g(generated,)h(to)e
(cases)-34 1681 y(where)f(a)e(large)h(n)o(um)o(b)q(er)f(of)g(small)f
(ob)r(jects)j(are)f(generated.)28 1731 y(The)d(setting)f(for)g(these)i
(b)q(enc)o(hmarks)e(where)h(SparcStation)f(10)g(with)g(32)f(Mb)o(ytes)i
(of)f(ph)o(ysical)g(memory)m(,)d(the)k(compiler)-34 1781
y(used)k(w)o(as)e Fg(gcc)h Fk(2.6.3)e(and)h(w)o(e)i(used)f
Fg(gprof)f Fk(for)h(pro\014ling)f(information.)i(The)f(times)f(are)h
(expressed)i(in)e(seconds.)28 1830 y(The)f(b)q(enc)o(hmarks)f(w)o(ere)h
(rep)q(eated)h(sev)o(eral)e(times,)f(since)i(while)f(w)o(e)g(w)o(ere)h
(dev)o(eloping)f(the)g(CMM,)g(the)h(implem)o(en)o(ta-)-34
1880 y(tion)f(of)g(the)h(Buc)o(h)o(b)q(erger)i(algorithm)10
b(w)o(as)i(also)g(b)q(eing)h(impro)o(v)o(ed.)j(Suc)o(h)d(impro)o(v)o
(em)o(en)o(ts)e(app)q(eared)i(to)g(e\013ect)h(uniformly)-34
1930 y(p)q(erformance)g(of)f(the)h(algorithm)e(with)h(the)i(v)n(arious)
e(collectors.)28 1980 y(The)h(\014rst)g(series)g(of)f(b)q(enc)o(hmarks)
g(compares)g(the)h(p)q(erformance)f(of)f(the)i(original)e(Bartlett's)i
(implem)o(en)o(tation,)c(with)-34 2030 y(the)k(CMM)g(using)g(the)g
(default)g(heap)g(and)g(CMM)g(using)f(the)i Fg(TempHeap)p
Fk(,)c(denoted)k(as)f(CMM-TH)g(in)g(these)h(tables.)28
2079 y(W)m(e)h(used)h(v)n(arious)e(sets)i(of)e(input)h(p)q(olynomials,)
d(whic)o(h)j(are)h(men)o(tioned)d(with)i(the)h(names)e(they)h(are)h
(giv)o(en)e(in)h(the)-34 2129 y(literature.)28 2179 y(The)e(results)h
(are)f(summarised)e(in)h(the)i(table)e(1.)18 b(The)c(last)g(column)e
(sho)o(ws)i(the)g(p)q(ercen)o(tage)i(impro)o(v)o(em)o(en)o(t)c(of)h
(using)-34 2229 y(the)h Fg(TempHeap)e Fk(with)i(resp)q(ect)i(to)e(the)g
(default)g(CMM)g(heap.)28 2279 y(The)f(impro)o(v)o(emen)o(t)d(app)q
(ears)k(to)f(b)q(e)g(signi\014can)o(t)g(across)g(a)g(v)n(ariet)o(y)f
(of)h(b)q(enc)o(hmarks,)f(ranging)g(from)f(17\045)h(to)h(32\045.)j(It)
-34 2329 y(is)11 b(also)h(in)o(teresting)g(to)g(notice)g(that)g(the)h
(CMM)e(default)h(algorithm)d(has)j(b)q(etter)i(p)q(erformance)d(than)h
(Bartlett's)h(original,)-34 2378 y(despite)k(the)f(o)o(v)o(erhead)h
(due)f(to)g(its)g(use)h(of)e(C++)i(and)f(mem)o(b)q(er)e(functions)i
(rather)h(than)f(straigh)o(t)g(C.)f(This)h(is)g(mainly)-34
2428 y(due)e(to)g(v)n(arious)f(co)q(de)i(optimisations)c(and)j(co)q(de)
h(tuning.)28 2478 y(T)m(o)g(study)h(in)f(detail)g(ho)o(w)g(m)o(uc)o(h)g
(the)h(garbage)f(collector)h(in\015uences)h(the)g(o)o(v)o(erall)d(p)q
(erformance,)i(w)o(e)f(analysed)h(the)-34 2528 y(v)n(arious)d(v)o
(ersions)h(b)o(y)g(means)f(of)g(a)h(program)e(pro\014ler.)28
2578 y(In)g(table)f(2)g(w)o(e)h(rep)q(ort)h(the)f(results)h(of)e
(running)g(the)h(b)q(enc)o(hmark)f Fg(katsura6)f Fk([14)o(],)h(pro)o
(viding)g(details)g(on)g(the)i(timings)-34 2627 y(of)k(memory)e(op)q
(erations:)25 b Fg(alloc)p Fk(,)17 b(the)h(primitiv)o(e)e(allo)q
(cator;)h Fg(collect)p Fk(,)g(o)o(v)o(erall)f(time)g(sp)q(en)o(t)j(in)e
(garbage)g(collection;)-34 2677 y Fg(pure)k(alloc)p Fk(,)15
b(allo)q(cation)g(time)g(less)i(collection)f(time;)g
Fg(n.)43 b(collect)p Fk(,)15 b(the)i(n)o(um)o(b)q(er)f(of)g(calls)g(to)
g(the)h(collector;)g Fg(avg.)-34 2727 y(collect)p Fk(,)d(a)o(v)o(erage)
i(time)f(of)g(a)h(collection.)24 b(In)16 b(the)h(last)e(column)g(w)o(e)
h(sho)o(w)g(t)o(w)o(o)g(\014gures)h(for)e(eac)o(h)i(op)q(eration,)f
(one)g(for)-34 2777 y(the)e(default)g(heap)g(and)g(the)g(second)h(for)f
(the)g Fg(TempHeap)p Fk(,)e(since)j(b)q(oth)f(heaps)g(are)g(used.)919
2901 y(19)p eop
%%Page: 20 20
20 19 bop 781 190 a Fk(T)m(able)14 b(2:)j(Analysis)p
431 245 1020 2 v 430 310 2 65 v 820 310 V 842 290 a Fc(Bartlett)p
1029 310 V 39 w(CMM)p 1196 310 V 42 w(CMM-TH)p 1449 310
V 431 311 1020 2 v 430 376 2 65 v 451 357 a Fk(Katsura6)e
(\(pro\014led\))p 820 376 V 94 w(452.38)p 1029 376 V
50 w(275.86)p 1196 376 V 136 w(213.49)p 1449 376 V 430
441 V 493 422 a Fg(alloc)p 820 441 V 291 w Fk(223.68)p
1029 441 V 70 w(43.96)p 1196 441 V 72 w(3.19+0.04)p 1449
441 V 430 506 V 493 486 a Fg(collect)p 820 506 V 247
w Fk(215.07)p 1029 506 V 70 w(37.06)p 1196 506 V 72 w(2.47+0.03)p
1449 506 V 430 571 V 493 551 a Fg(pure)21 b(alloc)p 820
571 V 223 w Fk(8.61)p 1029 571 V 92 w(6.90)p 1196 571
V 72 w(0.72+0.01)p 1449 571 V 430 635 V 493 616 a Fg(n.)43
b(collect)p 820 635 V 213 w Fk(931)p 1029 635 V 104 w(450)p
1196 635 V 95 w(16584+2)p 1449 635 V 430 700 V 493 681
a Fg(avg.)g(collect)p 820 700 V 157 w Fk(0.23)p 1029
700 V 92 w(0.08)p 1196 700 V 72 w(0.00+0.01)p 1449 700
V 431 702 1020 2 v 635 866 a(T)m(able)13 b(3:)k(Compacting)12
b(\(CMM-TH\))p 549 923 783 2 v 548 1045 2 122 v 570 1013
a Fc(Benc)o(h)p 743 1045 V 804 984 a(User)806 1025 y(time)p
921 1045 V 943 976 a(System)971 1025 y(time)p 1113 1045
V 1135 1005 a(Memory)p 1330 1045 V 549 1047 783 2 v 548
1111 2 65 v 570 1092 a Fk(k)n(atsura6)p 743 1111 V 62
w(197.83)p 921 1111 V 117 w(0.36)p 1113 1111 V 133 w(3941)p
1330 1111 V 548 1176 V 570 1157 a(b)r(jork70)p 743 1176
V 77 w(589.60)p 921 1176 V 117 w(3.10)p 1113 1176 V 112
w(12769)p 1330 1176 V 548 1241 V 570 1221 a(k)n(atsura7)p
743 1241 V 41 w(5023.73)p 921 1241 V 117 w(2.43)p 1113
1241 V 133 w(9509)p 1330 1241 V 549 1242 783 2 v 28 1409
a(The)k(use)h(of)f Fg(TempHeap)e Fk(pro)q(duces)j(striking)f(results:)
23 b(the)17 b(garbage)f(collection)f(time)g(b)q(ecomes)h(negligible)f
(and)h(ac-)-34 1458 y(cordingly)11 b(allo)q(cation)f(time)h(is)g(also)h
(signi\014can)o(tly)e(reduced.)20 b(The)12 b(total)f(allo)q(cation)f
(cost)j(using)e(the)i(default)e(CMM)h(heap)-34 1508 y(is)h(44)g
(seconds)i(whic)o(h)e(is)h(sligh)o(tly)e(less)i(than)f(the)h(gain)f
(from)e(using)j(the)g Fg(TempHeap)p Fk(.)i(Therefore)f(the)f(18\045)e
(impro)o(v)o(emen)o(t)-34 1558 y(in)k(the)h(o)o(v)o(erall)e(execution)i
(time)f(ac)o(hiev)o(ed)g(b)o(y)h(means)e(of)h(the)h Fg(TempHeap)e
Fk(is)h(equiv)n(alen)o(t)g(to)g(using)g(an)h(ideal)e(allo)q(cator)-34
1608 y(with)i(zero)h(cost)g(and)f(so)g(this)g(represen)o(ts)j(the)e
(maxim)n(um)13 b(increase)19 b(in)d(p)q(erformance)h(one)h(can)f(exp)q
(ect)i(to)e(obtain)g(b)o(y)-34 1658 y(impro)o(ving)11
b(memory)g(managemen)o(t.)28 1707 y(W)m(e)17 b(ha)o(v)o(e)g(also)f
(receiv)o(ed)i(satisfactory)f(rep)q(orts)i(on)e(the)g(p)q(erformance)g
(of)g(CMM)g(b)o(y)g(the)g(partners)i(in)d(the)i(P)o(oSSo)-34
1757 y(pro)r(ject)d(who)e(used)i(it)f(in)f(particular)h(for)f(implemen)
o(ting)e(a)i(linear)h(algebra)f(pac)o(k)n(age)h([16)o(].)-34
1873 y Fd(13.1)55 b(Space)19 b(Impro)n(v)n(emen)n(t)-34
1950 y Fk(One)13 b(of)e(the)i(design)f(requiremen)o(ts)h(for)f(CMM)g(w)
o(as)g(that)g(it)g(should)g(b)q(e)h(a)f(compacting)f(collector)h(to)g
(reduce)i(the)f(require-)-34 2000 y(men)o(ts)f(on)h(virtual)f(memory)f
(and)i(sw)o(apping.)k(This)c(requiremen)o(t)g(w)o(as)f(put)i(forw)o
(ard)e(b)o(y)h(the)h(mathematicia)o(ns)d(who)i(use)-34
2050 y(the)g(Buc)o(h)o(b)q(erger)h(algorithm)c(and)i(who)g(need)h(to)g
(tac)o(kle)f(problems)f(that)i(require)g(sev)o(eral)g(da)o(ys)f(of)g
(execution)h(and)f(in)g(the)-34 2099 y(order)i(of)g(gigab)o(ytes)f(of)g
(memory)m(.)28 2149 y(While)g(it)h(is)g(exp)q(ected)i(that)e(a)g(cop)o
(ying)f(collector)h(migh)o(t)e(exhibit)i(b)q(etter)i(space)f(p)q
(erformance)f(than)g(a)f(pure)i(mark-)-34 2199 y(and-sw)o(eep)j
(collector,)g(suc)o(h)h(comparisons)d(are)i(quite)g(hard)f(to)h(do)f
(through)g(actual)h(measuremen)o(ts.)28 b(Moreo)o(v)o(er)18
b(the)-34 2249 y(CMM)f(is)h(only)e(a)i(partial)e(cop)o(ying)h
(collector,)h(therefore)h(the)f(p)q(oten)o(tial)f(b)q(ene\014ts)j(of)d
(compaction)f(migh)o(t)f(ha)o(v)o(e)i(b)q(een)-34 2299
y(reduced.)28 2349 y(Therefore)h(w)o(e)f(set)h(up)f(some)f(b)q(enc)o
(hmarks)h(to)g(measure)g(the)g(time)f(and)h(space)h(p)q(erformance)e
(of)h(our)g(collector)g(in)-34 2398 y(comparison)d(of)h(the)h(same)f
(algorithm)d(and)k(the)g(same)f(co)q(de)h(using)f(the)h(B\177)-21
b(ohm-W)m(eiser)15 b(collector)h([6)o(])f(whic)o(h)g(is)h(totally)-34
2448 y(conserv)n(ativ)o(e)e(and)g(uses)h(the)f(tec)o(hnique)h(of)f
(mark-and-sw)o(eep.)28 2498 y(Here)f(are)f(the)h(results)g(of)e(a)g
(few)h(comparison.)k(The)c(\014gures)h(for)e(memory)f(represen)o(t)k
(the)e(o)o(v)o(erall)f(allo)q(cated)g(memory)m(,)-34
2548 y(whic)o(h)j(ho)o(w)o(ev)o(er)g(do)q(es)g(not)g(di\013er)h
(signi\014can)o(tly)d(from)h(the)h(v)n(alue)f(of)h(the)g(residen)o(t)h
(set)g(size.)28 2598 y(A)j(cop)o(ying)f(collector)i(needs)g(extra)f
(space)h(for)f(ob)r(jects)h(in)f(order)g(to)g(p)q(erform)f(the)i(cop)o
(y)m(.)30 b(Suc)o(h)18 b(di\013erence)i(with)-34 2647
y(resp)q(ect)15 b(to)d(a)g(mark-and-sw)o(eep)g(collector)h(app)q(ears)g
(consisten)o(tly)h(in)e(all)f(our)i(b)q(enc)o(hmarks)f(up)h(to)f(b)r
(jork70.)17 b(With)12 b(some)-34 2697 y(of)f(the)h(bigger)f(b)q(enc)o
(hmarks)h(lik)o(e)f(k)n(atsura7,)g(CMM-TH)g(is)h(not)f(only)g(faster)h
(but)g(also)f(the)h(o)o(v)o(erall)e(memory)g(requiremen)o(t)-34
2747 y(is)j(signi\014can)o(tly)g(reduced.)919 2901 y(20)p
eop
%%Page: 21 21
21 20 bop 627 192 a Fk(T)m(able)13 b(4:)18 b(Non)13 b(Compacting)f
(\(B\177)-21 b(ohm\))p 549 250 783 2 v 548 371 2 122
v 570 339 a Fc(Benc)o(h)p 743 371 V 804 311 a(User)806
352 y(time)p 921 371 V 943 302 a(System)971 352 y(time)p
1113 371 V 1135 331 a(Memory)p 1330 371 V 549 373 783
2 v 548 438 2 65 v 570 418 a Fk(k)n(atsura6)p 743 438
V 62 w(224.32)p 921 438 V 117 w(2.15)p 1113 438 V 133
w(2770)p 1330 438 V 548 502 V 570 483 a(b)r(jork70)p
743 502 V 77 w(641.53)p 921 502 V 96 w(12.78)p 1113 502
V 133 w(9818)p 1330 502 V 548 567 V 570 548 a(k)n(atsura7)p
743 567 V 41 w(5985.12)p 921 567 V 96 w(39.22)p 1113
567 V 112 w(18406)p 1330 567 V 549 569 783 2 v 28 735
a(The)15 b(follo)o(wing)c(diagram)h(sho)o(ws)j(the)f(amoun)o(t)f(of)g
(memory)f(used)j(and)f(reclaimed)f(b)o(y)h(CMM.)g(Eac)o(h)h(bar)f
(represen)o(ts)-34 785 y(ev)o(ery)e(\014fth)f(collection.)17
b(If)11 b(after)g(a)g(full)f(collection)h(the)h(space)h(used)f(is)f(ab)
q(o)o(v)o(e)g(25\045,)f(then)i(the)g(heap)g(is)f(expanded.)18
b(Notice)-34 834 y(that)d(one)g(third)g(of)f(the)i(allo)q(cated)e(heap)
h(is)g(used)h(during)e(collection)h(to)g(p)q(erform)f(cop)o(y)h(and)f
(is)h(sho)o(wn)g(as)g Fa(Headro)q(om)-34 884 y(fo)o(r)h(cop)o(y)d
Fk(in)h(the)g(diagram.)159 1898 y @beginspecial 75 @llx
70 @lly 450 @urx 300 @ury 3750 @rwi @setspecial
%%BeginDocument: bjork70.cmm.eps

200 dict begin

/Box {			% Stack: x y width height
    newpath
        exch 4 2 roll moveto
        dup 0 rlineto
        exch 0 exch rlineto
        neg 0 rlineto
    closepath
} def

/Rtext {		% Stack: x y str
  /str exch def
  exch str stringwidth pop sub exch moveto str show
} def

gsave			% Save the graphics state

% Default line style parameters
0.5 setlinewidth
0 setlinejoin
0 setlinecap

/bx 90 def
/by 90 def
/w 4.8 def
/mega 10 def
/maxmega 17 def
/top 90 mega maxmega 1 add mul add def

/grayfill{gsave setgray fill grestore} def

/bar {/h2 exch def /h1 exch def
 bx by w h1 Box 0.5 grayfill stroke
 bx by h1 add w h2 Box stroke
 bx by h1 h2 add add w h1 h2 add 2 div Box 0.9 grayfill stroke
 /bx bx w add def
} def

/Helvetica-Bold findfont 9 scalefont setfont
% X Axis
70 top moveto (MB) show
200 80 moveto (CMM: bjork70) show
newpath 90 90 moveto 330 0 rlineto stroke
% Y Axis
newpath 90  90 moveto 0 200 rlineto stroke
% tick
1 1 maxmega {
  /index exch def
  /y index mega mul 90 add def
  newpath 85 y moveto 5 0 rlineto stroke
  80 y 3 sub index (  )cvs Rtext
} for
%
% Leggenda
%
300 top 10 add 10 5 Box 0.9 grayfill stroke
325 top 10 add moveto 
(Headroom for copy) show
300 top 10 5 Box stroke
325 top moveto 
(Reclaimed) show
300 top 10 sub 10 5 Box 0.5 grayfill stroke
325 top 10 sub moveto 
(Used) show

% Chart
/expandheap {/heap exch def} def
/collect { % Stack: %used heap
  /used exch def
  % Heap is filled only up to 66%
  /filled heap .66 mul def
  /recl filled heap used mul 100 div sub def
  filled recl sub mega mul 1000000 div
  recl mega mul 1000000 div
  bar
} def

1190912 expandheap
13 collect
31 collect
2341888 expandheap
31 collect
3592192 expandheap
24 collect
31 collect
26 collect
4950016 expandheap
28 collect
35 collect
6424576 expandheap
27 collect
32 collect
35 collect
8026112 expandheap
23 collect
28 collect
32 collect
9765376 expandheap
22 collect
28 collect
32 collect
35 collect
11654144 expandheap
25 collect
28 collect
31 collect
33 collect
24 collect
26 collect
29 collect
32 collect
35 collect
27 collect
31 collect
34 collect
13705216 expandheap
26 collect
28 collect
31 collect
33 collect
15932416 expandheap
22 collect
25 collect
27 collect
29 collect
31 collect
33 collect
22 collect
25 collect
27 collect
29 collect
31 collect
34 collect
24 collect
26 collect
28 collect
30 collect
32 collect
23 collect
25 collect
28 collect
30 collect
32 collect

%Trailer
grestore
end
%EOF
%%EndDocument
 @endspecial 28 1989 a(The)g(follo)o(wing)d(diagram)g(sho)o(ws)j(the)g
(execution)g(using)f(CMM-TH.)g(In)g(most)g(cases)h(the)g
Fg(TempHeap)e Fk(is)h(just)h(cleared:)-34 2039 y(the)g(diagram)e(only)h
(sho)o(ws)h(the)h(e\013ect)g(of)e(ev)o(ery)i(ten)o(th)g(call)e(to)g
(the)i Fg(TempHeap)d Fk(collector.)159 2761 y @beginspecial
75 @llx 70 @lly 450 @urx 230 @ury 3750 @rwi @setspecial
%%BeginDocument: bjork70.cmmth.eps

200 dict begin

/Box {			% Stack: x y width height
    newpath
        exch 4 2 roll moveto
        dup 0 rlineto
        exch 0 exch rlineto
        neg 0 rlineto
    closepath
} def

/Rtext {		% Stack: x y str
  /str exch def
  exch str stringwidth pop sub exch moveto str show
} def

gsave			% Save the graphics state

% Default line style parameters
0.5 setlinewidth
0 setlinejoin
0 setlinecap

/bx 90 def
/by 90 def
/w 4.8 def
/mega 10 def
/maxmega 12 def
/top 90 mega maxmega 1 add mul add def

/grayfill{gsave setgray fill grestore} def

/bar {/h4 exch def /h3 exch def /h2 exch def /h1 exch def
 bx by w h1 Box 0.5 grayfill stroke
 bx by h1 add w h2 Box 0 grayfill stroke
 bx by h1 h2 add add w h3 Box 1 grayfill stroke
 bx by h1 h2 h3 add add add w h4 Box 0.9 grayfill stroke
 /bx bx w add def
} def

/Helvetica-Bold findfont 9 scalefont setfont
% X Axis
70 top moveto (MB) show
200 80 moveto (CMM-TH: bjork70) show
newpath 90 90 moveto 290 0 rlineto stroke
% Y Axis
newpath 90 90 moveto 0 top 90 sub rlineto stroke
% tick
1 1 maxmega {
  /index exch def
  /y index mega mul 90 add def
  newpath 85 y moveto 5 0 rlineto stroke
  80 y 3 sub index (  )cvs Rtext
} for
%
% Leggenda
%
200 top 10 sub 10 5 Box 0.9 grayfill stroke
225 top 10 sub moveto 
(Headroom for copy) show
200 top 20 sub 10 5 Box stroke
225 top 20 sub moveto 
(CMM-TH Reclaimed) show
200 top 30 sub 10 5 Box 0 grayfill stroke
225 top 30 sub moveto 
(CMM-TH Used) show
200 top 40 sub 10 5 Box 0.5 grayfill stroke
225 top 40 sub moveto 
(CMM Used) show

% Chart
/expandheap {/heap exch def} def
/default 0 def
/contsize 0.1 def
/collect { % Stack: %used
  /used exch def
  % Heap is filled only up to 66%
  /filled heap .66 mul def
  /recl filled heap used mul 100 div sub def
  filled recl sub mega mul 1000000 div
  0
  recl mega mul 1000000 div
  heap filled sub mega mul 1000000 div
  bar
  /default heap used mul 100 div def
} def

/tempcollect { % Stack: before after (n. of containers)
  /after exch def
  1 add /before exch def
  default 1000000 div mega mul
  after contsize mul mega mul
  before after sub contsize mul mega mul
  heap default before contsize mul 1000000 mul add sub 1000000 div mega mul
  bar
} def

1190912 expandheap
0 0 tempcollect
3 0 tempcollect
2341888 expandheap
22 collect
3592704 expandheap
33 collect
7 0 tempcollect
9 0 tempcollect
57 collect
4951040 expandheap
10 1 tempcollect
10 1 tempcollect
4 0 tempcollect
9 0 tempcollect
57 collect
6426624 expandheap
10 1 tempcollect
10 1 tempcollect
7 0 tempcollect
1 0 tempcollect
4 0 tempcollect
1 0 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
4 0 tempcollect
56 collect
8028672 expandheap
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
9 0 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
3 0 tempcollect
10 1 tempcollect
2 0 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
10 1 tempcollect
9 0 tempcollect
3 0 tempcollect
5 0 tempcollect
13 1 tempcollect
0 0 tempcollect
52 collect
9768448 expandheap
0 0 tempcollect
0 0 tempcollect
40 collect
11658240 expandheap
0 0 tempcollect

%Trailer
grestore
end
%EOF
%%EndDocument
 @endspecial 919 2901 a(21)p eop
%%Page: 22 22
22 21 bop 28 161 a Fk(The)14 b(follo)o(wing)e(diagram)f(sho)o(ws)j(the)
h(b)q(eha)o(viour)f(of)f(the)h(B\177)-21 b(ohm)13 b(collector:)159
1161 y @beginspecial 75 @llx 70 @lly 450 @urx 300 @ury
3750 @rwi @setspecial
%%BeginDocument: bjork70.boehm.eps

200 dict begin

/Box {			% Stack: x y width height
    newpath
        exch 4 2 roll moveto
        dup 0 rlineto
        exch 0 exch rlineto
        neg 0 rlineto
    closepath
} def

/Rtext {		% Stack: x y str
  /str exch def
  exch str stringwidth pop sub exch moveto str show
} def

gsave			% Save the graphics state

% Default line style parameters
0.5 setlinewidth
0 setlinejoin
0 setlinecap

/bx 90 def
/by 90 def
/w 4.8 def
/mega 10 def
/maxmega 18 def
/top 90 mega maxmega 1 add mul add def

/grayfill{gsave setgray fill grestore} def

/bar {/h3 exch def /h2 exch def /h1 exch def
 bx by w h1 Box 0.5 grayfill stroke
 bx by h1 add w h2 Box stroke
 bx by h1 h2 add add w h3 Box 0.9 grayfill stroke
 /bx bx w add def
} def

/Helvetica-Bold findfont 9 scalefont setfont
% X Axis
70 top moveto (MB) show
200 80 moveto (Boehm: bjork70) show
newpath 90 90 moveto 330 0 rlineto stroke
% Y Axis
newpath 90  90 moveto 0 200 rlineto stroke
% tick
1 1 maxmega {
  /index exch def
  /y index mega mul 90 add def
  newpath 85 y moveto 5 0 rlineto stroke
  80 y 3 sub index (  )cvs Rtext
} for
%
% Leggenda
%
300 top 10 5 Box 0.9 grayfill stroke
325 top moveto 
(Reclaimed) show
300 top 10 sub 10 5 Box stroke
325 top 10 sub moveto 
(Free) show
300 top 20 sub 10 5 Box 0.5 grayfill stroke
325 top 20 sub moveto 
(Used) show

% Chart
/collect { % Stack: reclaimed heap used
  /used exch def
  /heap exch def
  /recl exch def
  used mega mul 1000000 div
  heap recl sub used sub mega mul 1000000 div % free
  recl mega mul 1000000 div
  bar
} def

0 131072 38108 collect
92880 331776 146012 collect
122424 524288 280284 collect
238488 659456 368636 collect
201720 659456 399852 collect
151672 827392 486140 collect
213536 1036288 613500 collect
291440 1298432 759180 collect
499016 1298432 796492 collect
397056 1298432 872692 collect
396704 1298432 846884 collect
400560 1298432 861140 collect
386392 1298432 853516 collect
381480 1298432 860708 collect
370664 1298432 887668 collect
505168 1626112 1099156 collect
658040 2035712 1364044 collect
566472 2035712 1470084 collect
1001824 3186688 2223468 collect
941952 3186688 2214876 collect
1245032 3985408 2680148 collect
1260464 3985408 2650588 collect
1278768 3985408 2683740 collect
1241216 3985408 2703796 collect
1201624 3985408 2760452 collect
1155648 3985408 2801940 collect
1163160 3985408 2789844 collect
1131000 3985408 2862972 collect
1311272 4984832 3680676 collect
1635776 6234112 4582684 collect
2199472 7794688 5577956 collect
2665392 9744384 6808892 collect
2616704 9744384 6814524 collect
2747200 9744384 6817220 collect
2901472 9744384 6821332 collect
2740624 9744384 6814964 collect
2907376 9744384 6814076 collect
2904808 9744384 6815708 collect
2866808 9744384 6813932 collect
2714704 9744384 6824428 collect
2745560 9744384 6818668 collect
2911840 9744384 6808244 collect
2500640 9744384 6965076 collect
3379096 11841536 8289460 collect
3027832 11841536 8474876 collect
4061728 13938688 9721316 collect
3795224 13938688 9700964 collect
4003200 13938688 9691892 collect
4028872 13938688 9676748 collect
3926296 13938688 9743628 collect
3594512 13938688 9728916 collect
4182904 13938688 9730908 collect
3904776 13938688 9715372 collect
5165616 16035840 10752948 collect
5173184 16035840 10748372 collect
4976560 16035840 10790380 collect
4642104 16035840 10980108 collect
4610144 16035840 10970628 collect
4880800 16035840 10984644 collect
4738296 16035840 10979228 collect
4777208 16035840 10973852 collect
4906296 16035840 10963908 collect
4794520 16035840 10967780 collect
4566192 16035840 10982732 collect
4671248 16035840 10987516 collect
5799168 18132992 12042548 collect
5769008 18132992 12053052 collect
5966056 18132992 12053452 collect
5745640 18132992 12059412 collect

%Trailer
grestore
end
%EOF
%%EndDocument
 @endspecial 28 1241 a(The)f(di\013erence)h(in)d(the)i(amoun)o(t)e(of)g
(memory)f(used)j(with)f(this)g(collector)h(is)f(most)f(lik)o(ely)g(due)
h(to)g(am)o(biguous)e(p)q(oin)o(ters.)-34 1291 y(The)14
b(data)f(structures)i(in)e(the)h(Buc)o(h)o(b)q(erger)i(algorithm)10
b(are)k(p)q(olynomials)d(whic)o(h)i(ma)o(y)e(b)q(ecome)i(quite)h(large)
f(during)g(the)-34 1341 y(computation,)e(and)i(so)g(signi\014can)o(t)g
(amoun)o(ts)e(of)i(memory)d(ma)o(y)i(not)h(b)q(e)g(reclaimed)f(if)h
(suc)o(h)h(structures)h(can)f(b)q(e)f(reac)o(hed)-34
1390 y(through)j(am)o(biguous)f(p)q(oin)o(ters.)26 b(The)17
b(lik)o(elyho)q(o)q(d)f(of)g(this)g(phenomenon)g(gro)o(ws)h(with)f(the)
h(size)g(of)f(the)h(problem)f(and)-34 1440 y(ma)o(y)d(signi\014can)o
(tly)g(reduce)k(the)e(e\013ectiv)o(eness)j(of)c(a)h(conserv)n(ativ)o(e)
g(collector.)21 b(T)m(o)14 b(limit)e(this)j(problem)f(B\177)-21
b(ohm)13 b(collector)-34 1490 y(has)k(the)h(p)q(ossibilit)o(y)e(of)g
(declaring)h(ob)r(jects)h(not)f(con)o(taining)g(p)q(oin)o(ters.)28
b(The)17 b(problem)f(with)h(am)o(biguous)e(p)q(oin)o(ters)j(is)-34
1540 y(limited)11 b(in)j(the)g(CMM)g(since)h(CMM)f(kno)o(ws)g(the)g(la)
o(y)o(out)f(of)g(ob)r(jects)i(and)f(so)g(it)f(can)h(b)q(e)h(accurate)g
(in)f(their)g(tra)o(v)o(ersal.)28 1590 y(All)f(these)j(b)q(enc)o
(hmarks)e(w)o(ere)h(run)g(on)e(mac)o(hines)h(with)f(enough)i(ph)o
(ysical)e(memory)f(to)i(a)o(v)o(oid)f(sw)o(apping,)g(since)i(the)-34
1640 y(time)g(sp)q(en)o(t)i(in)f(sw)o(apping)f(is)i(di\016cult)e(to)h
(measure:)23 b(it)16 b(is)g(not)g(rep)q(orted)i(b)o(y)e(the)h(Unix)f
(system)g(call)f Fg(getrusage)g Fk(and)-34 1689 y(ma)o(y)d(v)n(ary)h
(at)h(eac)o(h)g(execution.)-34 1804 y Fd(13.2)55 b(Sync)n(hronising)19
b(Collector)e(and)j(Mutator)-34 1880 y Fk(The)h(idea)f(of)g(using)g(a)g
(temp)q(orary)g(area)g(for)g(allo)q(cating)f(temp)q(orary)h(ob)r(jects)
h(in)f(the)h(Buc)o(h)o(b)q(erger)i(algorithm)18 b(w)o(as)-34
1930 y(suggested)d(b)o(y)f(F)m(aug)o(\022)-20 b(ere)14
b([12)o(])g(who)g(realised)g(it)g(through)g(a)f(man)o(ual)f(allo)q
(cator/deallo)q(cator)g(in)i(his)g(system.)k(The)c(CMM)-34
1980 y(generalizes)h(this)f(idea)f(and)h(automates)f(the)h(mec)o
(hanism.)28 2030 y(One)i(ma)o(y)d(question)i(ho)o(w)o(ev)o(er)h
(whether)g(other)g(kno)o(wn)e(tec)o(hniques)j(w)o(ould)d(w)o(ork)h(as)g
(w)o(ell.)21 b(F)m(or)14 b(instance)i(one)f(ma)o(y)-34
2079 y(think)e(that)i(an)e(incremen)o(tal)g(collector)i(w)o(ould)e(pro)
o(vide)h(similar)d(b)q(ene\014ts,)16 b(since)e(it)g(could)g(reco)o(v)o
(er)h(quic)o(kly)e(temp)q(orary)-34 2129 y(ob)r(jects.)28
2179 y(T)m(o)18 b(v)o(erify)g(this)g(h)o(yp)q(othesis,)i(w)o(e)f
(tested)h(our)f(algorithm)c(also)j(using)h(the)g(incremen)o
(tal/generational)d(v)o(ersion)j(of)-34 2229 y(B\177)-21
b(ohm)12 b(collector.)28 2279 y(The)j(results)h(sho)o(w)f(somewhat)f
(unexp)q(ectedly)j(that)e(the)g(p)q(erformance)g(in)g(this)g(case)h
(decreases,)h(b)q(oth)e(in)f(terms)h(of)-34 2329 y(memory)c(and)j
(time,)e(with)h(resp)q(ect)k(to)c(the)i(standard)f(v)o(ersion)g(of)g
(B\177)-21 b(ohm)12 b(collector.)28 2378 y(The)e(next)h(exp)q(erimen)o
(t)f(is)g(to)g(consider)h(whether)g(sync)o(hronising)f(the)h(collector)
f(with)g(the)g(m)o(utator)f(can)h(b)q(e)h(b)q(ene\014cial.)-34
2428 y(W)m(e)h(exploited)g(one)g(ho)q(ok)g(pro)o(vided)g(in)g(the)h
(B\177)-21 b(ohm)10 b(collector)j(through)f(function)g
Fg(GC)p 1320 2428 14 2 v 15 w(maybe)p 1445 2428 V 15
w(gc\(\))f Fk(whic)o(h)i(tests)g(whether)-34 2478 y(a)h(collection)h
(is)g(in)f(order)i(and)f(then)g(p)q(erforms)g(it.)21
b(W)m(e)14 b(added)i(an)e(explicit)h(call)f(in)h(the)g(b)q(o)q(dy)g(of)
f Fg(simplify)p Fk(,)g(similarly)-34 2528 y(to)f(what)h(w)o(e)g(did)g
(for)f(the)i Fg(TempHeap)p Fk(.)28 2578 y(The)c(results)h(sho)o(w)f
(that)g(this)g(can)g(b)q(e)g(e\013ectiv)o(e:)18 b(if)10
b(w)o(e)h(trace)h(the)f(n)o(um)o(b)q(er)f(of)h(calls)f(with)h(the)g
(pro\014ler,)g(w)o(e)g(notice)g(that)-34 2627 y(only)g(4)g(of)g(the)h
(92)f(e\013ectiv)o(e)i(collections)f(required)h(in)e(the)h(computation)
e(are)i(triggered)g(automatically)m(,)c(con\014rming)i(that)-34
2677 y(the)k(garbage)f(collector)h(is)f(in)o(v)o(ok)o(ed)g(at)g(the)h
(righ)o(t)g(time.)i(Ho)o(w)o(ev)o(er)e(this)g(solution)e(do)q(es)j(not)
e(lead)g(to)h(an)o(y)f(impro)o(v)o(emen)o(t,)-34 2727
y(probably)j(b)q(ecause)j(the)e(B\177)-21 b(ohm)16 b(collector)h(still)
f(needs)i(to)f(scan)g(the)h(whole)e(ro)q(ot)h(set.)28
b(An)17 b(attempt)f(to)h(use)h(b)q(oth)f(the)-34 2777
y(incremen)o(tal)c(and)g(explicit)h(calls)f(raised)i(an)e(error)i
(message)f(b)o(y)f(the)i(collector.)919 2901 y(22)p eop
%%Page: 23 23
23 22 bop 691 190 a Fk(T)m(able)13 b(5:)18 b(B\177)-21
b(ohm)13 b(incremen)o(tal)p 559 237 762 2 v 558 359 2
122 v 580 327 a Fc(Benc)o(h)p 754 359 V 794 298 a(User)795
339 y(time)p 911 359 V 932 290 a(System)961 339 y(time)p
1103 359 V 1124 319 a(Memory)p 1320 359 V 559 360 762
2 v 558 425 2 65 v 580 406 a Fk(k)n(atsura6)p 754 425
V 41 w(230.47)p 911 425 V 117 w(0.72)p 1103 425 V 133
w(3028)p 1320 425 V 558 490 V 580 470 a(b)r(jork70)p
754 490 V 56 w(650.63)p 911 490 V 117 w(2.96)p 1103 490
V 112 w(16520)p 1320 490 V 559 491 762 2 v 681 653 a(T)m(able)g(6:)18
b(B\177)-21 b(ohm)13 b(sync)o(hronised)p 559 708 V 558
830 2 122 v 580 798 a Fc(Benc)o(h)p 754 830 V 794 769
a(User)795 811 y(time)p 911 830 V 932 761 a(System)961
811 y(time)p 1103 830 V 1124 790 a(Memory)p 1320 830
V 559 832 762 2 v 558 896 2 65 v 580 877 a Fk(k)n(atsura6)p
754 896 V 41 w(236.11)p 911 896 V 117 w(0.64)p 1103 896
V 133 w(3028)p 1320 896 V 558 961 V 580 942 a(b)r(jork70)p
754 961 V 56 w(654.67)p 911 961 V 117 w(2.43)p 1103 961
V 112 w(16520)p 1320 961 V 559 963 762 2 v 28 1129 a(The)g(B\177)-21
b(ohm)11 b(collector)i(o)o(v)o(erall)e(sho)o(w)o(ed)i(v)o(ery)g(go)q(o)
q(d)f(p)q(erformance)g(in)g(all)f(our)i(tests)h(and)e(it)g(seems)h
(hard)f(to)h(do)f(b)q(etter)-34 1179 y(without)h(an)o(y)h(user)h(supp)q
(ort.)-34 1316 y Fl(14)69 b(Assessmen)n(t)-34 1407 y
Fk(Ha)o(ving)13 b(c)o(hosen)i(to)f(base)h(the)g(design)f(of)g(the)h
(collector)f(on)g(inheritance)h(and)f(sp)q(ecialisation)g(pro)o(v)o(ed)
g(to)g(b)q(e)h(con)o(v)o(enien)o(t)-34 1457 y(to)e(ac)o(hiev)o(e)i(an)e
(op)q(en)i(design)f(whic)o(h)f(can)i(b)q(e)f(easily)f(extended.)20
b(But)14 b(what)g(are)h(the)f(dra)o(wbac)o(ks)g(of)f(suc)o(h)i(c)o
(hoice?)-34 1573 y Fd(14.1)55 b(Space)19 b(Ov)n(erhead)-34
1649 y Fk(One)12 b(ob)r(jection)g(is)g(that)g(all)f(collected)h(ob)r
(jects)h(m)o(ust)e(inherit)h(from)e(class)i Fg(CmmObject)e
Fk(whic)o(h)i(declares)h(a)f Fg(traverse)e Fk(as)i(a)-34
1699 y(virtual)h(function)g(and)h(therefore)h(space)g(o)o(v)o(erhead)f
(is)g(added)g(to)f(eac)o(h)i(ob)r(ject.)k(Some)12 b(o)o(v)o(erhead)i
(is)g(ho)o(w)o(ev)o(er)g(inevitable)-34 1749 y(to)e(enable)g(garbage)g
(collection.)17 b(Other)d(solutions)d(either)j(add)e(one)g(w)o(ord)g
(of)g(header)h(to)f(iden)o(tify)f(the)i(t)o(yp)q(e)g(of)f(ob)r(jects)h
(in)-34 1799 y(the)h(heap)f(or)h(allo)q(cate)f(ob)r(jects)h(in)f(a)g
(separate)i(region)e(for)g(eac)o(h)h(t)o(yp)q(e,)g(whic)o(h)f(also)g
(cause)h(some)f(w)o(aste)h(of)e(memory)m(.)j(On)-34 1849
y(the)f(other)g(hand)f(w)o(e)g(w)o(ere)h(able)f(to)h(a)o(v)o(oid)e(an)o
(y)g(space)j(o)o(v)o(erhead)e(except)i(what)e(C++)h(needs)h(for)e
(implem)o(en)o(ting)d(ob)r(jects)-34 1899 y(with)j(virtual)g(functions)
h(and)g(2)g(bits)g(p)q(er)g(w)o(ord)g(in)f(global)g(tables.)-34
2015 y Fd(14.2)55 b(Ov)n(erloading)18 b Fo(new)-34 2091
y Fk(The)f(CMM)f(exploits)g(the)h(placemen)o(t)f(syn)o(tax)g(of)g(the)h
Fg(new)f Fk(op)q(erator)h(to)f(determine)h(where)g(and)g(ho)o(w)f(to)g
(allo)q(cate)g(an)-34 2141 y(ob)r(ject.)27 b(This)16
b(of)g(course)i(limits)d(user)i(co)q(de)h(from)d(using)h(this)h
(feature,)h(ev)o(en)f(though)f(just)h(for)g(collected)g(ob)r(jects.)27
b(It)-34 2191 y(is)16 b(hard)g(to)g(assess)h(ho)o(w)f(bad)g(is)g(this)g
(limitati)o(on:)j(in)d(fact)g(Ellis)f(and)h(Detlefs)g([11)o(])g(argue)g
(that)g(there)h(is)f(no)g(reason)h(to)-34 2241 y(o)o(v)o(erload)c
Fg(new)h Fk(for)h(a)f(collected)h(class,)g(whose)g(allo)q(cation)e(is)i
(p)q(erformed)f(b)o(y)h(the)g(garbage)f(collector)h(metho)q(ds.)20
b(On)15 b(the)-34 2291 y(other)e(hand,)g(in)f(the)h(CMM,)g(class)g
Fg(CmmObject)e Fk(is)i(just)g(a)f(class)i(de\014ned)f(in)g(a)f(public)h
(library)f(whose)h(co)q(de)h(is)f(accessible,)-34 2340
y(so)h(there)h(is)f(no)f(di\016cult)o(y)g(in)h(de\014ning)g(deriv)o(ed)
g(classes)h(from)d(it,)h(with)h(suitable)g(sp)q(ecialisation)f(of)g
(its)h Fg(new)f Fk(op)q(erator.)28 2390 y(One)i(case)g(in)e(whic)o(h)h
(w)o(e)g(found)f(this)h(useful)g(w)o(as)g(to)g(de\014ne)h(collectable)f
(ob)r(jects)h(of)e(v)n(ariable)g(size.)28 2440 y(Consider)h(the)h
(follo)o(wing)c(example:)-34 2523 y Fg(class)21 b(BigNum)f
Ff(f)9 2573 y Fg(BigNum\(int)g(l\))h Ff(f)53 2623 y Fg(length)f(=)i(l;)
53 2673 y(limbs)f(=)g(new)g(int[l];)9 2722 y Ff(g)9 2772
y Fg(int)h(length;)919 2901 y Fk(23)p eop
%%Page: 24 24
24 23 bop 9 161 a Fg(int*)21 b(limbs;)-34 211 y Ff(g)28
294 y Fk(With)13 b(this)g(de\014nition)g(of)g Fg(BigNum)p
Fk(,)f(creating)h(a)g Fg(BigNum)f Fk(will)g(require)i(t)o(w)o(o)f
(memory)e(allo)q(cations)h(and)h(accessing)i(the)-34
343 y(arra)o(y)e Fg(limbs)g Fk(will)g(require)h(an)g(extra)g(p)q(oin)o
(ter)g(indirection.)28 393 y(T)m(o)f(impro)o(v)o(e)f(this)i(solution,)e
(CMM)i(pro)o(vides)g(the)g(class)g Fg(GcVarObject)p Fk(,)d(a)j(deriv)o
(ed)g(class)g(from)e Fg(CmmObject)p Fk(,)g(whic)o(h)-34
443 y(pro)o(vides)k(a)h Fg(new)e Fk(op)q(erator)i(with)f(an)h
(additional)d(parameter)i(for)h(the)g(size)g(of)f(the)h(v)n(ariable)e
(mem)o(b)q(er.)24 b(The)17 b(follo)o(wing)-34 493 y(example)12
b(illustrates)i(its)g(use:)-34 584 y Fg(class)21 b(BigNum)f(:)i(public)
e(GcVarObject)-34 634 y Ff(f)9 684 y Fg(int)i(length;)9
734 y(int)g(limbs[1];)41 b(//)36 b Fj(size)15 b(determine)n(d)g(at)g
(obje)n(ct)f(cr)n(e)n(ation)-34 784 y Ff(g)p Fg(;)9 883
y(BigNum*)21 b(num)g(=)g(new\(256)g(*)g(sizeof\(int\)\))f(BigNum;)28
974 y Fk(The)12 b(ob)r(ject)h Fg(num)e Fk(is)h(created)i(in)d(the)i
(default)e(heap)i(and)e(has)i(ro)q(om)d(for)i(256)f(in)o(tegers.)18
b(The)12 b(implemen)o(tation)d(of)i(class)-34 1024 y
Fg(GcVarObject)g Fk(migh)o(t)h(b)q(e)j(ho)o(w)o(ev)o(er)f(compiler)e
(dep)q(enden)o(t.)-34 1140 y Fd(14.3)55 b(Arra)n(y)19
b(of)g Fo(CmmObject)p Fd(s)-34 1217 y Fk(Recen)o(tly)g(the)g(ANSI)h
(standard)f(committee)e(has)i(in)o(tro)q(duced)g(o)o(v)o(erloading)f
(of)g(the)h Fg(new[])f Fk(op)q(erator)i(for)e(allo)q(cating)-34
1267 y(arra)o(ys)13 b(of)f(ob)r(jects.)19 b(Using)13
b(this)g(feature,)g(w)o(e)g(ha)o(v)o(e)g(de\014ned)h(the)g(appropriate)
f Fg(CmmObject::opera)o(tor)19 b(new[])11 b Fk(so)i(that)-34
1317 y(an)g(arra)o(y)h(of)f Fg(CmmObject)p Fk(s)g(is)g(allo)q(cated)h
(in)f(the)i(collected)f(heap)h(and)e(an)h(appropriate)g
Fg(traverse)e Fk(for)i(suc)o(h)g(arra)o(ys.)-34 1454
y Fl(15)69 b(Related)21 b(W)-6 b(ork)-34 1545 y Fk(The)17
b(Bo)q(ehm-W)m(eiser)g(collector)g([6])f(is)h(a)g(w)o(ell)f(kno)o(wn)h
(collector)g(for)g(C++)h(whic)o(h)f(is)g(totally)f(conserv)n(ativ)o(e)h
(and)g(uses)-34 1595 y(the)c(tec)o(hnique)h(of)e(mark-and-sw)o(eep.)17
b(It)12 b(can)h(handle)g(sp)q(ecially)f(atomic)f(ob)r(jects)j(\(con)o
(taining)e(no)g(p)q(oin)o(ters\))h(and)g(it)f(can)-34
1645 y(optionally)g(w)o(ork)h(in)h(incremen)o(tal)f(fashion.)28
1694 y(W)m(ork)g(on)h(adding)f(garbage)g(collection)h(to)f(C++)i(has)f
(b)q(een)h(done)f(b)o(y)f(D.)h(Samples)e(and)i(D.)f(Edelson.)18
b(Samples)13 b([17)o(])-34 1744 y(prop)q(oses)h(mo)q(difying)9
b(C++,)k(to)g(include)f(a)h(garbage)f(collection)g(en)o(vironmen)o(t)g
(as)h(part)g(of)f(the)h(language.)k(This)12 b(ma)o(y)f(b)q(e)-34
1794 y(a)i(go)q(o)q(d)g(long)f(term)h(approac)o(h)g(for)g(garbage)g
(collection)g(in)g(C++)h(but)f(is)g(not)h(suitable)f(for)g(a)g(pro)r
(ject)h(lik)o(e)f(P)o(oSSo)g(whic)o(h)-34 1844 y(needs)k(p)q(ortable)e
(garbage)h(collection)f(facilities)f(as)i(so)q(on)f(as)h(p)q(ossible.)
23 b(Our)16 b(feeling)f(is)h(that)f(this)h(w)o(ork)f(demonstrates)-34
1894 y(ho)o(w)e(the)i(\015exibilit)o(y)d(of)i(ob)r(ject)h(orien)o(ted)f
(languages)f(can)i(b)q(e)f(used)h(to)f(implemen)o(t)d(a)j(v)o(ery)g
(complex)f(en)o(vironmen)o(t,)f(lik)o(e)-34 1943 y(CMM,)h(without)h
(requiring)f(mo)q(di\014cations)f(to)i(the)h(language.)28
1993 y(Edelson)g([9)o(])f(has)g(b)q(een)i(exp)q(erimen)o(ting)d(with)h
(the)h(co)q(existence)i(of)c(di\013eren)o(t)j(garbage)e(collection)f
(tec)o(hniques.)21 b(The)-34 2043 y(\015exibilit)o(y)14
b(of)i(the)h(solutions)e(he)i(adopts)f(in)g(his)g(approac)o(h)g(allo)o
(ws)f(the)i(co)q(existence)h(of)d(di\013eren)o(t)i(garbage)f
(collectors,)-34 2093 y(but)e(he)h(do)q(es)g(not)f(pro)o(vide)g(an)o(y)
g(in)o(terface)g(to)g(the)h(user)h(to)e(customise)f(and/or)h(de\014ne)h
(his)g(o)o(wn)e(memory)f(managemen)o(t)-34 2143 y(facilities.)28
2192 y(Ellis)h(and)g(Detlefs)h([11)o(])f(prop)q(ose)i(some)e
(extensions)h(to)g(the)g(C++)g(language)f(to)g(allo)o(w)f(for)i
(collectable)f(ob)r(ject.)19 b(The)-34 2242 y(ma)r(jor)11
b(c)o(hange)i(is)g(the)h(addition)e(of)g(the)i(t)o(yp)q(e)f(sp)q
(eci\014er)i Fg(gc)d Fk(to)h(sp)q(ecify)h(whic)o(h)e(heap)i(to)f(use)g
(in)g(allo)q(cating)e(the)j(ob)r(ject)g(or)-34 2292 y(a)f(class.)19
b(They)14 b(also)g(prop)q(ose)h(to)e(c)o(hange)i(the)f(op)q(erator)h
Fg(new)21 b(T)14 b Fk(to)f(call)h(the)g(collector)g(allo)q(cator)f
(when)i Fg(T)e Fk(is)h(a)g Fg(gc)f Fk(t)o(yp)q(e,)-34
2342 y(and)f(as)h(a)f(consequence)j(of)d(this,)g(the)h(o)o(v)o
(erloading)e(of)h Fg(new)g Fk(and)h Fg(delete)e Fk(op)q(erators)i(for)g
Fg(gc)f Fk(classes)h(is)g(forbidden.)k(While)-34 2392
y(the)e Fg(gc)e Fk(k)o(eyw)o(ord)i(is)f(compatible)e(with)i(our)h
(solution)e(of)h(inheriting)f(from)g(the)i(base)g(class)f
Fg(CmmObject)p Fk(,)e(the)j(constrain)o(t)-34 2442 y(on)g
Fg(new)f Fk(needs)j(to)e(b)q(e)h(relaxed)f(to)g(allo)o(w)f(o)o(v)o
(erloading)f(of)i Fg(new)f Fk(when)i(additional)d(argumen)o(ts)i(are)h
(presen)o(t.)23 b(Otherwise)-34 2491 y(this)17 b(constrain)o(t)h(will)e
(blo)q(c)o(k)h(the)h(p)q(ossibilit)o(y)e(of)h(using)g(di\013eren)o(t)i
(heaps)f(for)f(the)h(same)e(kind)h(of)g(ob)r(jects)i(in)e(di\013eren)o
(t)-34 2541 y(p)q(ortions)f(of)g(a)g(program.)23 b(Other)18
b(suggestions)e(from)f(the)i(Ellis-Detlefs)e(prop)q(osals)i(are)f
(quite)h(v)n(aluable,)e(for)h(instance)-34 2591 y(making)11
b(the)k(compiler)e(a)o(w)o(are)h(of)g(the)g(garbage)g(collection)g
(presence)j(and)d(a)o(v)o(oid)f(pro)q(ducing)h(co)q(de)h(where)g(a)f(p)
q(oin)o(ter)h(to)-34 2641 y(an)f(ob)r(ject)i(\(whic)o(h)f(ma)o(y)e(b)q
(e)j(the)f(last)g(one\))h(is)e(o)o(v)o(erwritten.)22
b(This)15 b(can)g(happ)q(en)h(for)e(instance)i(in)f(optimizing)d(co)q
(de)k(for)-34 2691 y(accessing)f(structure)h(mem)o(b)q(ers.)919
2901 y(24)p eop
%%Page: 25 25
25 24 bop -34 161 a Fl(16)69 b(Conclusion)-34 252 y Fk(The)10
b(CMM)g(o\013ers)h(garbage)f(collection)g(facilities)f(without)g
(signi\014can)o(t)h(compromises.)15 b(Programmers)8 b(can)i(use)h(a)f
(generic)-34 302 y(collector,)15 b(a)f(sp)q(eci\014c)j(collector)e(or)f
(no)h(collector)g(at)g(all,)e(according)i(to)g(the)g(need)h(of)e(eac)o
(h)i(algorithm.)i(The)d(algorithm)-34 351 y(can)e(b)q(e)g(in)f(con)o
(trol)h(when)g(necessary)i(of)d(its)h(memory)d(requiremen)o(ts)j(and)g
(do)q(es)g(not)g(ha)o(v)o(e)g(to)f(adapt)h(to)f(a)h(\014xed)g(memory)
-34 401 y(managemen)o(t)e(p)q(olicy)m(.)28 451 y(The)f(CMM)g(is)g
(implemen)o(ted)d(as)j(a)g(C++)g(library)m(,)f(pro)q(duced)i(with)f
(extensiv)o(e)g(revisions)g(from)e(the)j(original)d(Bartlett's)-34
501 y(co)q(de.)18 b(It)c(is)f(b)q(eing)g(hea)o(vily)g(used)h(in)f(the)h
(implemen)o(tatio)o(n)d(of)i(high)f(demanding)g(computer)h(algebra)g
(algorithms)e(in)i(the)-34 551 y(P)o(oSSo)k(pro)r(ject.)28
b(The)18 b(CMM)f(pro)o(vides)h(the)f(required)h(\015exibilit)o(y)e
(with)h(excellen)o(t)h(p)q(erformance)f(in)f(p)q(erformance)h(as)-34
600 y(compared)c(to)h(v)o(ersions)g(of)f(the)i(same)e(algorithms)e(p)q
(erforming)i(man)o(ual)e(allo)q(cation.)28 650 y(The)h(next)f(c)o
(hallenge)g(w)o(ould)f(b)q(e)i(to)f(incorp)q(orate)h(in)e(the)i(C++)g
(compiler)d(the)j(minim)o(al)c(facilities)i(required)i(for)e(CMM)-34
700 y(supp)q(ort:)19 b(the)14 b(addition)f(of)g(the)i
Fg(gc)e Fk(k)o(eyw)o(ord,)g(prop)q(osed)i(b)o(y)f(Ellis)f(and)h
(Detlefs,)f(could)h(facilitate)f(this.)-34 837 y Fl(17)69
b(Av)l(ailabilit)n(y)-34 928 y Fk(The)14 b(sources)i(for)d(CMM)h(are)g
(a)o(v)n(ailable)e(for)i(anon)o(ymous)e(ftp)h(from)f(site)j
Fg(ftp.di.unipi.it)c Fk(in)i(the)h(directory)-34 978
y Fg(/pub/project/pos)o(so)p Fk(.)h(Please)g(address)g(commen)o(ts,)c
(suggestions,)j(bug)g(rep)q(orts)h(to)f Fg(cmm@di.unipi.it)p
Fk(.)-34 1115 y Fl(18)69 b(Ac)n(kno)n(wledgem)o(en)n(ts)-34
1206 y Fk(Carlo)14 b(T)m(ra)o(v)o(erso)h(and)g(John)h(Abb)q(ott)f
(participated)h(to)f(the)g(design.)22 b(J.C.)15 b(F)m(augere)g(pro)o
(vided)h(the)f(idea)g(for)g(this)g(w)o(ork.)-34 1256
y(Joac)o(him)g(Hollman)f(and)i(F)m(abrice)h(Rouillier)e(help)q(ed)i(in)
g(testing)g(the)g(\014rst)h(protot)o(yp)q(e)f(implemen)o(tatio)o(n.)24
b(Discussions)-34 1306 y(with)13 b(J.)h(Ellis)f(w)o(ere)i(useful)f(to)g
(ensure)h(compatibilit)o(y)c(of)i(his)h(prop)q(osal)f(with)h(our)g
(framew)o(ork.)-34 1443 y Fl(References)-13 1534 y Fk([1])19
b(G.)11 b(A)o(ttardi)h(and)h(T.)e(Flagella,)g(\\A)h(customisable)f
(memory)f(managemen)o(t)g(framew)o(ork",)g Fj(USENIX)j(C++)g(Confer-)51
1584 y(enc)n(e)i(Pr)n(o)n(c)n(e)n(e)n(dings)s Fk(,)f(Cam)o(bridge,)e
(Massac)o(h)o(usetts,)j(123{142)d(\(1994\).)-13 1667
y([2])19 b(G.)g(A)o(ttardi)h(and)h(T.)e(Flagella,)h(\\Customising)e(ob)
r(ject)j(allo)q(cation",)f(in)g(M.)f(T)m(ok)o(oro)g(and)i(R.)e(P)o
(aresc)o(hi)i(\(eds.\))51 1717 y Fj(Obje)n(ct-Oriente)n(d)f(Pr)n(o)n
(gr)n(amming)p Fk(,)h Fj(Pr)n(o)n(c)n(e)n(e)n(dings)g(of)g(the)g(8th)h
(ECOOP)p Fk(,)d Fj(L)n(e)n(ctur)n(e)i(Notes)g(in)g(Computer)g(Scienc)n
(e)51 1767 y Fc(821)p Fk(.)13 b(Berlin:Springer-V)m(erlag,)g(320{343)f
(\(1994\).)-13 1850 y([3])19 b(G.)h(A)o(ttardi,)i(T.)e(Flagella)f(and)i
(P)m(.)f(Iglio,)g(\\P)o(erformance)h(T)m(uning)f(in)g(a)g(Customizable)
g(Collector",)h Fj(Memory)51 1899 y(Management)p Fk(,)15
b(IWMM)e(95,)g Fj(LNCS)h Fk(n.)f(986,)g(Springer-V)m(erlag,)g(Berlin,)h
(179{196)e(\(1995\).)-13 1982 y([4])19 b(J.F.)d(Bartlett)h
(\\Compacting)d(garbage)j(collection)f(with)g(am)o(biguous)e(ro)q(ots")
i(T)m(ec)o(h.)h(Rep.)f(88/2,)f(DEC)i(W)m(estern)51 2032
y(Researc)o(h)e(Lab)q(oratory)m(,)e(P)o(alo)g(Alto,)g(California,)e(F)m
(ebruary)j(1988.)-13 2115 y([5])19 b(J.F.)g(Bartlett,)h(\\Mostly-cop)o
(ying)e(collection)h(pic)o(ks)g(up)h(generations)f(and)g(C++",)i(T)m
(ec)o(h.)e(Rep.)f(TN-12,)i(DEC)51 2165 y(W)m(estern)15
b(Researc)o(h)g(Lab)q(oratory)m(,)e(P)o(alo)g(Alto,)f(California,)g
(\(1989\).)-13 2248 y([6])19 b(H.J.)c(Bo)q(ehm)g(and)h(M.)f(W)m(eiser)h
(\\Garbage)f(collection)h(in)f(an)g(unco)q(op)q(erativ)o(e)i(en)o
(vironmen)o(t",)d Fj(Softwar)n(e)i(Pr)n(actic)n(e)51
2298 y(and)g(Exp)n(erienc)n(e)p Fk(,)d Fc(18)p Fk(\(9\),)h(807{820)e
(\(1988\).)-13 2381 y([7])19 b(B.)c(Buc)o(h)o(b)q(erger,)j(\\Gr\177)-21
b(obner)15 b(bases:)22 b(an)15 b(algorithmic)e(metho)q(d)h(in)h(p)q
(olynomial)d(ideal)j(theory",)g Fj(R)n(e)n(c)n(ent)i(tr)n(ends)e(in)51
2431 y(multidimensional)g(systems)f(the)n(ory)p Fk(,)g(N.)f(K.)h(Bose,)
g(ed.,)g(D.)f(Reidel)g(Publ.)g(Comp.,)f(184{232)g(\(1985\).)-13
2514 y([8])19 b(D.)12 b(L.)f(Detlefs,)i(\\Concurren)o(t)g(garbage)f
(collection)g(for)g(C++",)g(CMU-CS-90-119,)f(Sc)o(ho)q(ol)g(of)h
(Computer)g(Science,)51 2564 y(Carnegie)i(Mellon)f(Univ)o(ersit)o(y)m
(,)g(\(1990\).)-13 2647 y([9])19 b(D.R.)11 b(Edelson,)i(\\Precompiling)
e(C++)i(for)g(garbage)f(collection",)g(in)g Fj(Memory)i(Management)p
Fk(,)g(Y.)f(Bekk)o(ers)h(and)f(J.)51 2696 y(Cohen)h(\(Eds.\),)g
(Lecture)i(Notes)e(in)g(Computer)f(Science,)i(n.)e(637,)g(Springer-V)m
(erlag,)g(299{314)f(\(1992\).)919 2901 y(25)p eop
%%Page: 26 26
26 25 bop -34 161 a Fk([10])19 b(D.R.)12 b(Edelson,)j(\\A)e
(mark-and-sw)o(eep)h(collector)g(for)g(C++",)g Fj(Pr)n(o)n(c.)g(of)h(A)
o(CM)g(Confer)n(enc)n(e)g(on)g(Principle)g(of)g(Pr)n(o-)51
211 y(gr)n(amming)g(L)n(anguages)p Fk(,)f(\(1992\).)-34
294 y([11])19 b(J.R.)11 b(Ellis)h(and)g(D.L.)g(Detlefs,)g(\\Safe,)g
(e\016cien)o(t)h(garbage)f(collection)g(for)h(C++",)f(Xero)o(x)h(P)m
(AR)o(C)f(rep)q(ort)h(CSL-93-4,)51 343 y(\(1993\).)-34
427 y([12])19 b(J.C)12 b(F)m(aug)o(\022)-20 b(ere,)12
b(\\R)o(\023)-20 b(esolution)11 b(des)i(syst)o(\022)-20
b(emes)13 b(d')o(\023)-20 b(equations)12 b(alg)o(\023)-20
b(ebriques",)11 b(PhD)h(thesis,)h(Univ)o(ersit)o(\023)-20
b(e)13 b(P)o(aris)f(6,)g(\(1994\).)-34 510 y([13])19
b(J.D.)e(Ic)o(h)o(biah)g(et)h(al.,)f(\\Rationale)f(for)h(the)h(design)g
(of)f(the)h(AD)o(A)f(programming)d(language",)j Fj(A)o(CM)h(SIGPLAN)51
559 y(Notic)n(es)p Fk(,)13 b Fc(14)p Fk(\(6\),)g(\(1979\).)-34
642 y([14])19 b(S.)14 b(Katsura)g(et)g(al.,)f Fj(Cel)r(l)h(Biophysics)g
Fc(11)p Fk(,)f(309{319)f(\(1987\).)-34 725 y([15])19
b(G.)13 b(Nelson,)h(editor,)f Fj(Systems)i(Pr)n(o)n(gr)n(amming)g(with)
f(Mo)n(dula3)p Fk(,)g(Pren)o(tice)h(Hall,)e(\(1991\).)-34
808 y([16])19 b(F.)14 b(Rouillier)e(\\P)o(ersonal)h(comm)o(unication",)
d(\(1994\).)-34 891 y([17])19 b(A.D.)11 b(Samples,)f(\\GC-co)q(op)q
(erativ)o(e)h(C++",)h Fj(L)n(e)n(ctur)n(e)h(Notes)f(in)h(Computer)g
(Scienc)n(e)p Fk(,)f Fc(637)p Fk(,)f(Springer-V)m(erlag,)h(315{)51
941 y(329)h(\(1992\).)-34 1024 y([18])19 b(D.)12 b(W)m(einreb,)h(D.)g
(Mo)q(on)g(and)g(R.M.)f(Stallman,)e(\\Lisp)j(Mac)o(hine)g(Man)o(ual")f
(Massac)o(h)o(usetts)j(Institute)f(of)f(T)m(ec)o(hnol-)51
1074 y(ogy)m(,)f(Cam)o(bridge,)g(Massac)o(h)o(usetts,)j(\(1983\).)-34
1157 y([19])k(E.)13 b(P)m(.)f(W)m(en)o(t)o(w)o(orth)g(\\Pitfalls)f(of)h
(conserv)n(ativ)o(e)h(garbage)g(collection",)f Fj(Softwar)n(e)h(Pr)n
(actic)n(e)g(and)h(Exp)n(erienc)n(e)p Fk(,)f Fc(20)p
Fk(\(7\),)51 1207 y(719{727)f(\(1990\).)-34 1290 y([20])19
b(P)m(.R.)12 b(Wilson)g(\\Unipro)q(cessor)j(garbage)e(collection)g(tec)
o(hniques",)h(in)f Fj(Memory)h(Management)p Fk(,)h(Y.)e(Bekk)o(ers)i
(and)e(J.)51 1340 y(Cohen)h(\(Eds.\),)p Fj(L)n(e)n(ctur)n(e)h(Notes)f
(in)h(Computer)g(Scienc)n(e)p Fk(,)f Fc(637)p Fk(,)f(Springer-V)m
(erlag,)g(1{42)g(\(1992\).)-34 1423 y([21])19 b(P)m(.R.)9
b(Wilson)g(et)j(al.,)d(\\Dynamic)f(Storage)j(Allo)q(cation:)k(A)c(surv)
o(ey)g(and)g(Critical)e(Review",)i Fj(Memory)h(Management)p
Fk(,)51 1473 y(IWMM)i(95,)f Fj(LNCS)p Fk(,)g Fc(986)p
Fk(,)g(Springer-V)m(erlag,)g(Berlin,)g(1{116)g(\(1995\).)-34
1556 y([22])19 b(B.)h(Zorn,)h(\\The)g(measured)f(cost)g(of)g(conserv)n
(ativ)o(e)g(garbage)g(collection',')g(T)m(ec)o(hnical)f(Rep)q(ort)i
(CU-CS-573-92,)51 1605 y(Departmen)o(t)13 b(of)h(Computer)f(Science,)i
(Univ)o(ersit)o(y)e(of)h(Colorado)e(at)i(Boulder,)g(\(1992\).)919
2901 y(26)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF
back to top