Memory leak

Hey Ya’ll,

Does anyone know of a good way to monitor code in real time to determine
memory loss through a thread or process. We seem to have sprung a leak
and believe that it is from an action that takes memory but does not
release it on completion of the task. Any GOOD ideas would be a great
help.

Thanks All
John

Be warn that if you use thread under QNX4 memory allocation function
are NOT thread safe.

I have attached some code to this post. Link this with you code.
Replace all malloc/free with mem_malloc mem_free etc.

At any point terminate your process and call mem_term, this
function will tell you where (what line number ) a malloc was
done without a corresponding free.

Of course this will not check for malloc inside the c library.

“John Parsons” <parsonsj@esi.com> wrote in message
news:39B8DBC7.6638F25@esi.com

Hey Ya’ll,

Does anyone know of a good way to monitor code in real time to determine
memory loss through a thread or process. We seem to have sprung a leak
and believe that it is from an action that takes memory but does not
release it on completion of the task. Any GOOD ideas would be a great
help.

Thanks All
John

begin 666 mem.c
M+RH@RLK1&%T92!L87-T(&UO9&EF:65D.B P-2U=6PM,3DY-R J+PH*+RH*
MBH@(%1H:7,@:7,@82!C;W!Y<FEG:‘1E9"!W;W)K(’=H:6-H(&ES(&9U;F-T
M:6]N86QL>2!I9&5N=&EC86P@=&@=V]R:PHJ
B @;W)I9VEN86QL>2!P=6)L
M:7-H960@:6X@36EC<F@0V]R;G5C;W!I82!M86=A>FEN92 H:7-S=64@(S4R
M+"!-87)C:“U!<’)I;“P**BH@(#$Y.3 I(&%N9”!I<R!F<F5E;'D@;&EC96YS
M960@8GD@=&AE(&%U=&AO<BP@5V%L=&5R($)R:6=H=“P@9F]R(&%N>2!U<V4N
M"BHO”@HOE@;65M+F,@("!&<FD@2F%N(#(V(#$Y.3 @("!-;V1I9FEE9"!B
M>3H@5V%L=&5R($)R:6=H=" J+PHO
B!-96UO<GD@;6%N86=E;65N=”!P86-K
M86=E(" @(" @(" @(" @(" @(" @(" J+PH*(VEN8VQU9&4@(" @/’-T9&EO
M+F@^“B-I;F-L=61E(” @(#QS=&1L:6(N:#X*“B\O(VEN8VQU9&4@(” @/&EO
M+F@^"@HC:69N9&5F($U%35](“B-I;F-L=61E(” @(")I;F-L=61E+VUE;2YH
M(@HC96YD:68*“B-I9FYD968@87-S97)T"B-I;F-L=61E(” @(#QA<W-E<G0N
M:#X*(V5N9&EF"@HC:68@9&5F:6YE9"A?35-#7U9%4BD*(VEN8VQU9&4@(" @
M/&1O<RYH/@HC96YD:68*“B-I;F-L=61E(#QS=’)I;F<N:#X*“FEN=”!M96U?
M:6YI=&5D(#T@,#L@(” @(" @(" @("\J("$](# @:68@:6YI=&EA;&EZ960@
M(" @(" @(" @(" @(“HO”@IS=&%T:6,@:6YT(&UE;5]B96AA=FEO<B ]($U%
M35]!0D]25$U31SL*<W1A=&EC(&EN=" HF9P2AV;VED2 ]("AI;G0@“HI
M*‘9O:60I4Y53$P[(" @("\J(&]U=“UO9BUM96UO<GD@:&%N9&QE<B @(” @
M(“HO"G-T871I8R!I;G0@;65M7V-O=6YT.R @(” @(" @("\J(",@;V8@86QL
M;V-S('1H870@:&%V96XG="!B965N(&9R964G9" @(“HO"G-T871I8R!I;G0@
M;65M7W-C;W5N=#TP.R @(” @(" @+RH@(R!O9B!S86QL;V-S('1H870@:&%V
M96XG="!B965N(&9R964G9" J+PIS=&%T:6,@:6YT(&YE87(@;65M7V5X8V5P
M=&EO;BAV;VED
3L@+RH@8V%L;&5D(’=H96X@;W5T(&]F(&UE;6]R>2 J+PH*
M+RH@1&5T97)M:6YE(’=H97)E(‘1O(’-E;F0@97)R;W(@;65S<V%G97,@B*
M(V1E9FEN92!F97)R(" @(" @<W1D97)R"@HO
BHJBHJBHJBHJBHJBHJ
M
BHJBHJBHJBHJB*“G9O:60@;65M7W-E=&5X8V5P=&EO;B@@:6YT(&9L
M86<L(&EN=” HFAA;F1L97)?9G I’9O:60I(“D*>PH@(” @;65M7V)E:&%V
M:6]R(#T@9FQA9SL*(” @(&9P(#T@&UE;5]B96AA=FEO<B ]/2!-14U?0T%,
M3$90
2 _(&AA;F1L97)?9G @.B P.PHC:68@9&5F:6YE9"A$14)51U]-14TI
M"B @("!A<W-E<G0H," /2!F;&%G(“8F(&9L86<@/#T@345-7U)%5%)93L
M(V5N9&EF"GT*“B\JBHJBHJBHJBHJBHJBHJBHJBHJ"B J(%1H:7,@
M:7,@8V%L;&5D(’=H96X@=V4G<F4@;W5T(&]F(&UE;6]R>2X*(“H@4F5T=7)N
M<SH*(“H@(” @,3H@(” @=’)Y(&%G86EN('1O(&%L;&]C871E('1H92!M96UO
M<GD*(“H@(” @,#H@(” @9VEV92!U<”!A;F0@<F5T=7)N($Y53$P*(“HO”@IS
M=&%T:6,@:6YT(&YE87(@;65M7V5X8V5P=&EO;BAV;VED0I[(" @:6YT(&)E
M:&%V:6]R.PH
(" @(&)E:&%V:6]R(#T@;65M7V)E:&%V:6]R.PH@(" @9F]R
M*#L[0H@(" @>PH@(" @("!S=VET8V@@&)E:&%V:6]R0H@(" @("![“B @
M(” @(" @("!C87-E($U%35]!0D]25$U31SH
(" @(" @(" @(" @9G!U=’,H
M(D9A=&%L(&5R<F]R.B!O=70@;V8@;65M;W)Y7&XB+&9E<G(I.PH@(" @(" @
M(" @(" OB!&04Q,+51(4D]51T@@B*(" @(" @(" @(&-A<V4@345-7T%"
M3U)4.@H@(" @(" @(" @("!E>&ET
$58251?1D%)3%5212D[“B @(” @(" @
M(" @("\J($Y/5%)%04-(140@B*(" @(" @(" @(&-A<V4@345-7T-!3$Q&
M4#H
(" @(" @(" @(" @87-S97)T
&9P3L(" @(" @(" @(" @8F5H879I
M;W(@/2 HF9P2@I.PH@(" @(" @(" @("!B<F5A:SL*(" @(" @(" @(&-A
M<V4@345-7U)%5$Y53$PZ"B @(" @(" @(" @(’)E=‘5R;B P.PH@(" @(" @
M(" @8V%S92!-14U?4D544EDZ"B @(" @(" @(" @(’)E=‘5R;B Q.PH@(" @
M(" @(" @9&5F875L=#H)“B\J;&EN=” M934P-B J+PH@(" @(" @(" @("!A
M<W-E<G0H,“D[“B\J;&EN=” K934P-B J+PH@(” @("!]“B @(”!]"GT*“B\J
MBHJBHJBHJBHJBHJBHJBHJBHJBHJ+PH(VEF(&1E9FEN960H1$5”
M54=?345-0H(W5N9&5F(&UE;5]S=’)D=7 “B-I9B P"F-H87(@FUE;5]S
M=’)D=7 H8V]N<W0@8VAA<B J<RD
>PH@(” @("!R971U<FX@;65M7W-T<F1U
M<%]D96)U9RAS+%]?1DE,15]?+%]?3$E.15]?3L?0H
(V5N9&EF"@IC:&%R
M(“IM96U?<W1R9’5P7V1E8G5G*&-O;G-T(&-H87(@G,L8VAA<B J9FEL92P@
M:6YT(&QI;F4I"GL
(” @(" @8VAA<B J<#L*“B @(” @(’ @/2!S"B @(" @
M(" @(" _(“AC:&%R(“HI(&UE;5]M86QL;V-?9&5B=6<H*'5N<VEG;F5D2!S
M=’)L96XH<RD@R Q+&9I;&4L;&EN92D(" @(" @(" @(#H@3E5,3#L
(” @
M(” @:68@"!S("D@>PH)"7)E='5R;B!P(#@<W1R8W!Y’ L<RD@.B!P.PH)
M("!]"@D@(’)E=‘5R;B!.54Q,.PI]"B-E;’-E"F-H87(@FUE;5]S=’)D=7 H
M8V]N<W0@8VAA<B J<RD
>PH@(" @("!C:&%R(“IP.PH*(” @(" @<" ](’,@
M/R H8VAA<B J2!M96U?;6%L;&]C"AU;G-I9VYE9"D@<W1R;&5N*’,I(“L@
M,2D@.B!.54Q,.PH@(” @("!I9B H(’,@2![“B @(” @(" @("!R971U<FX@
M<" _(’-T2AP+’,I(#H@<#L
(" @(" @?0H*“2 @<F5T=7)N($Y53$P[
M”@I]"@HC96YD:68@+RH@1$5"54=?345-(“HO”@P*(VEF9&5F($1%0E5’7TU%
M30H*<W1A=&EC(&QO;F<@;65M7VUA>&%L;&]C.R @(" @+RH@;6%X(",@;V8@
M8GET97,@86QL;V-A=&5D(" @(" @(" @B*<W1A=&EC(&QO;F<@;65M7VYU
M;6%L;&]C.R @(" @+RH@8W5R<F5N=" C(&]F(&)Y=&5S(&%L;&]C871E9" @
M(" @(" @(" @B*“B-D969I;F4@0D5&3U)%5D%,(#!X,3(S-#4V-S@@(”\J
M('9A;'5E('1O(&1E=&5C="!U;F1E<G)U;B @(“HO"B-D969I;F4@049415)6
M04P@(#!X.#<V-30S,C$@(”\J('9A;'5E('1O(&1E=&5C="!O=F5R<G5N(" @
M(“HO”@H
+RH@5&AE(&9O;&QO=VEN9R!S:&]U;&0@8F4@<V5L96-T960@=&@
M9VEV92!M87AI;75M(’!R;V)A8FEL:71Y('1H870@(" @B*+RH@<&]I;G1E
M<G,@;&]A9&5D(’=I=&@@=&AE<V4@=F%L=65S(’=I;&P@8V%U<V4@86X@;V)V
M:6]U<R!C<F%S:“X@3VX@(” @B*+RH@56YI>"!M86-H:6YE<RP@82!L87)G
M92!V86QU92!W:6QL(&-A=7-E(&$@<V5G;65N="!F875L=“X@(” @(" @B*
M+RH@34%,3$]#5D%,(&ES('1H92!V86QU92!T;R!S970@;6%L;&]C)V0@9&%T
M82!T;RX@(" @(" @(" @(" @(" @B*“B-D969I;F4@0D%$5D%,(” @(" @
M(" @(#!X-T$
(V1E9FEN92!-04Q,3T-604P@,'A%10H
+RH@1&ES86)L92!M
M87!P:6YG(&UA8W)O<R @(" @B*(W5N9&5F(" @(" @;65M7VUA;&QO8PHC
M=6YD968@(" @("!M96U?8V%L;&]C"B-U;F1E9B @(" @(&UE;5]R96%L;&]C
M"B-U;F1E9B @(" @(&UE;5]F<F5E"@HO
B!#<F5A=&4@82!L:7-T(&]F(&%L
M;"!A;&QO8R=E9"!P;VEN=&5R<RP@<F5T86EN:6YG(&EN9F@86)O=70@=VAE
M<F4@(" J+PHO
B!E86-H(&%L;&]C(&-A;64@9G)O;2X@5&AI<R!I<R!A(’)E
M86P@;65M;W)Y(&%N9"!S<&5E9"!H;V<L(&)U="!W:&@(" J+PHO
B!C87)E
M<R!W:&5N('EO=2=V92!G;W0@;V)S8W5R92!P;VEN=&5R(&)U9W,N(" @(" @
M(" @(" @(" @(" @(" J+PH
<W1R=6-T(&UH"GL@<W1R=6-T(&1E8G5G7VUE
M;2 J36YE>‘0[(" @("\J(&YE>‘0@:6X@;&ES=" @(" @(" @(" @(" @(“HO
M"B @<W1R=6-T(&1E8G5G7VUE;2 J37!R978[(” @("\J(’!R979I;W5S(‘9A
M;‘5E(&EN(&QI<W0@(" @(“HO"B @8VAA<B J369I;&4[(” @(" @(" @("\J
M(&9I;&5N86UE(&]F(’=H97)E(&%L;&]C871E9" @(" @(" @(" @(“HO"B @
M:6YT($UL:6YE.R @(” @(" @(" @("\J(&QI;F4@;G5M8F5R(&]F(’=H97)E
M(&%L;&]C871E9" @(“HO"B @=6YS:6=N960@36YB>71E<SL@(” @("\J(’-I
M>F4@;V8@=&AE(&%L;&]C871I;VX@(" @(" @(" @(“HO"B @;&]N9R!-8F5F
M;W)E=F%L.R @(” @("\J(&1E=&5C="!U;F1E<G)U;B!O9B!D871A(" @(" @
M(" @(“HO"GT@.PH*<W1A=&EC(’-T<G5C=”!D96)U9U]M96T*>PH@(" @(’-T
M<G5C="!M:"!M.PH@(" @(&-H87(@9&%T85LQ73L@(" @(" @(" @("\J(‘1H
M92!D871A(&%C=‘5A;&QY(&%L;&]C871E9" @(" @(" @(" @(“HO"GT@;65M
M7V%L;&]C;&ES=” ]“GL*(” @>R @’-T<G5C="!D96)U9U]M96T@BD@3E5,
M3"P
(" @(" @
’-T<G5C="!D96)U9U]M96T@BD@3E5,3"P(" @(" @(FYO
M;F%M92(L"B @(" @(#$Q,3$Q+ H@(" @(" P+ H@(" @("!“149/4D5604P*
M(” @?2P*(" @>RAC:&%R4%&5$525D%,?0I].PH+RH@0V]N=F5R="!F<F]M
M(&$@=F]I9" J=&@82!$14)51U]-14T@<W1R=6-T+B @B*(V1E9FEN92!M
M96U?<'1R=&]D;"AP
2 @"AS=’)U8W0@9&5B=6=?;65M(“HI(”@H8VAA<B J
M
7 @+2!S:7IE;V8H<W1R=6-T(&UH2DI"@H"B\J($-O;G9E<G0@9G)O;2!A
M($1%0E5’7TU%32!S=’)U8W0@=&@82!M96U?<‘1R+B @(" @("HO"B-D969I
M;F4@;65M7V1L=&]P=’(H9&PI("@H=F]I9" J2 F"AD;“DM/F1A=&%;,%TI
M0H(V1E9FEN92!N97AT(” @(" @(" @(" @;2Y-;F5X= HC9&5F:6YE(’!R
M978@(" @(" @(" @("!M+DUP<F5V"B-D969I;F4@9FEL92 @(" @(" @(" @
M(&TN369I;&4*(V1E9FEN92!L:6YE(" @(" @(" @(" @;2Y-;&EN90HC9&5F
M:6YE(&YB>71E<R @(" @(" @("!M+DUN8GET97,(V1E9FEN92!B969O<F5V
M86P@;2Y-8F5F;W)E=F%L"@HO
BHJBHJBHJBHJBHJBHJBHJBHJBHJ
MBH(“H@4V5T(&YE=R!V86QU92!O9B!F:6QE+&QI;F4*(“HO”@IV;VED(&UE
M;5]S971N97=F:6QE;&EN92AV;VED(“IP=’(L(&-H87(@F9I;"P@:6YT(&QI
M;BD
>PH@(” @<W1R=6-T(&1E8G5G7VUE;2 J9&P[”@H@(" @9&P@/2!M96U?
M<‘1R=&]D;"AP=’(I.PH@(" @9&PM/F9I;&4@/2!F:6P[“B @(”!D;“T^;&EN
M92 ](&QI;CL*?0H*+RHJBHJBHJBHJBHJBHJBHJBHJBHJBH(“H@
M4’)I;G0@;W5T(’-T<G5C=”!D96)U9U]M96TN"B J+PH*<W1A=&EC(‘9O:60@
M;F5A<B!M96U?<’)I;G1D;“AS=’)U8W0@9&5B=6=?;65M(“ID;“D*>PH@(” @
M(”!F<’)I;G1F*&9E<G(L(F%L;&]C)V0@9G)O;2!F:6QE(”<E<R<@;&EN92 E
M9”!N8GET97,@)60@<‘1R(’@E<%QN(BP*(" @(" @(" @(" @9&PM/F9I;&4L
M9&PM/FQI;F4L9&PM/FYB>71E<RQM96U?9&QT;W!T<BAD;“DI.PI]”@HOBHJ
M
BHJBHJBHJBHJBHJBHJBHJBHJ@H@B!0<FEN="!O=70@9FEL92!A
M;F0@;&EN92!N=6UB97(N"B J+PH
<W1A=&EC(‘9O:60@;F5A<B!M96U?9FEL
M;&EN*"!C:&%R(“IF:6PL(&EN=”!L:6XI"GL*(" @(" @9G!R:6YT9BAF97)R
M+")&:6QE("<E<R<@;&EN92 E9%QN(BQF:6PL;&EN3L(" @(" @9F9L=7-H
M*&9E<G(I.PI]"@HOBHJBHJBHJBHJBHJBHJBHJBHJBHJ@H@B!)
M9B!$14)51U]-14T@:7,@;F]T(&]N(&9O<B!S;VUE(&UO9’5L97,L(‘1H97-E
M(’)O=71I;F5S(’=I;&P@9V5T"B J(&-A;&QE9"X
(“HO"B-I9FYD968@1$5”
M54=?345-"@IV;VED(“IM96U?8V%L;&]C*”!U;G-I9VYE9"!U0I[“B @(” @
M(’)E='5R;B!M96U?8V%L;&]C7V1E8G5G
’4L7U]&24Q%7U\L7U],24Y%7U\I
M.PI]"@IV;VED(“IM96U?;6%L;&]C*'5N<VEG;F5D('4I"GL*(” @(" @<F5T
M=7)N(&UE;5]M86QL;V-?9&5B=6<H=2Q?7T9)3$5?7RQ?7TQ)3D5?7RD[“GT*
M"G9O:60@FUE;5]R96%L;&]C”!V;VED(“IP+”!U;G-I9VYE9"!U0I[“B @
M(” @(’)E='5R;B!M96U?<F5A;&QO8U]D96)U9RAP+'4L7U]&24Q%7U\L7U],
M24Y%7U\I.PI]"@IV;VED(&UE;5]F<F5E
"!V;VED("IP0I[“B @(” @(&UE
M;5]F<F5E7V1E8G5G
’ L7U]&24Q%7U\L7U],24Y%7U\I.PI](" @( H*“B\J
MBHJBHJBHJBHJBHJBHJBHJBHJB*“G9O:60@;65M7V9R965F<”@@
M=F]I9" J<"D
>PH@(” @("!M96U?9G)E92AP3L?0H*(V5N9&EF"@HOBHJ
M
BHJBHJBHJBHJBHJBHJBH*(“H@1&5B=6<@=F5R<VEO;G,@;V8@;65M
M7V-A;&QO8R@I+”!M96U?9G)E92@I(&%N9"!M96U?<F5A;&QO8R@I+@H@B*
M"G9O:60@FUE;5]M86QL;V-?9&5B=6<H('5N<VEG;F5D(&XL(&-H87(@F9I
M;"P@:6YT(&QI;BD
>R @('9O:60@G ["@HO+PEP<FEN=&8H(FUA;&QO8R E
M9" E9" E9%QN(BP@;BP@9FEL+"!L:6X@3L(" @(’ @/2!M96U?8V%L;&]C
M7V1E8G5G
&XL9FEL+&QI;BD[“B @(”!I9B H<"D
(" @(" @;65M<V5T
’ L
M34%,3$]#5D%,+&XI.PH@(" @<F5T=7)N(’ [“GT*“G9O:60@FUE;5]C86QL
M;V-?9&5B=6<H('5N<VEG;F5D(&XL(&-H87(@F9I;"P@:6YT(&QI;BD>PH@
M(" @<W1R=6-T(&1E8G5G7VUE;2 J9&P"@H);65M7VEN:70H3L"B @("!D
M;PH@(" @("!D;"
U8W0@9&5B=6=?;65M(“HI"B @(” @(" @("!C
M86QL;V,H<VEZ96]F
"ID;“D@R!N("L@<VEZ96]F$%&5$525D%,2 M(#$L
M,2D[“B @(”!W:&EL92 H9&P@/3T@3E5,3" F)B!M96U?97AC97!T:6]N
"DI
M.PH@(” @:68@&1L(#T]($Y53$PI"B @("![“B-I9B P"B @(” @(’!R:6YT
M9B@B26YS=69F:6-I96YT(&UE;6]R>2!F;W(@86QL;V,@;V8@)60@870@(BQN
M
3L*(” @(” @;65M7V9I;&QI;BAF:6PL;&EN3L(" @(" @<’)I;G1F*")-
M87@@86QL;V-A=&5D(’=A<SH@)6QD7&XB+&UE;5]M87AA;&QO8RD[“B-E;F1I
M9@H@(” @("!R971U<FX@3E5,3#L*(" @(‘T*(" @(&1L+3YF:6QE(#T@9FEL
M.PH@(" @9&PM/FQI;F4@/2!L:6X[“B @(”!D;“T^;F)Y=&5S(#T@;CL*(” @
M(&1L+3YB969O<F5V86P@/2!“149/4D5604P[“B @(” J*'5N<VEG;F5D(&QO
M;F<@BD@)BAD;"T^9&%T85MN72D@/2!!1E1%4E9!3#L"B @(” OB!!9&0@
M9&P@=&@<W1A<G0@;V8@86QL;V-A=&EO;B!L:7-T(“HO"B @(”!D;“T^;F5X
M=” ](&UE;5]A;&QO8VQI<W0N;F5X=#L
(" @(&1L+3YP<F5V(#T@)FUE;5]A
M;&QO8VQI<W0[“B @(”!M96U?86QL;V-L:7-T+FYE>‘0@/2!D;#L*(" @(&EF
M(“AD;“T^;F5X=” A/2!.54Q,0H@(" @("!D;"T^;F5X="T^<’)E=B ](&1L
M.PH
(” @(&UE;5]C;W5N=“LK.PH@(” @;65M7VYU;6%L;&]C(“L](“AL;VYG
M6X[“B @(”!I9B H;65M7VYU;6%L;&]C(#X@;65M7VUA>&%L;&]C0H@(” @
M(”!M96U?;6%X86QL;V,@/2!M96U?;G5M86QL;V,[“B @(”!R971U<FX@;65M
M7V1L=&]P=’(H9&PI.PI]"@IV;VED(&UE;5]F<F5E7V1E8G5G*"!V;VED("IP
M=’(L(&-H87(@F9I;"P@:6YT(&QI;BD>PH@(" @("!S=’)U8W0@9&5B=6=?
M;65M(“ID;#L*“B @(” @(&EF(“AP=’(@/3T@3E5,3"D*(” @(” @(" @(" @
M<F5T=7)N.PHC:68@, H@(" @("![(" @("!F<’)I;G1F*&9E<G(L(D9R965I
M;F<@3E5,3"!P;VEN=&5R(&%T("(I.PH@(" @(" @(" @("!G;W1O(&5R<CL*
M(" @(" @?0HC96YD:68*(" @(" @:68@&UE;5]C;W5N=" /2 P0H@(" @
M("![(" @("!F<’)I;G1F*&9E<G(L(DUO<F4@9G)E97,@=&AA;B!A;&QO8W,@
M870@(BD[“B @(” @(" @(" @(&=O=&@97)R.PH@(" @("!]“B @(” @(&1L
M(#T@;65M7W!T<G1O9&PH<‘1R3L"2 @:68@"!P=’(@/3T@"!V;VED(“HI
M,'AE965E965E92 I('L*“0D)9G!R:6YT9B@@9F5R<BP@(DEN=F%L:60@<&]I
M;G1E<B H96UP='D@;65M;W)Y2(I.PH)"0EG;W1O(&5R<CL"0E]”@D)“B @
M(” @(&EF(“AD;“T^8F5F;W)E=F%L(”$]($)%1D]2159!3"D*(” @(” @>PH@
M(" @(" @(" @("!F<’)I;G1F*&9E<G(L(E!O:6YT97(@>“5P(‘5N9&5R<G5N
M7&XB+’!T<BD[“B @(” @(” @(" @(&=O=&@97)R,CL*(" @(" @?0H@(" @
M("!I9B HBAU;G-I9VYE9" J2 F9&PM/F1A=&%;9&PM/FYB>71E<UT@(3T@
M049415)604PI"B @(" @(‘L*(" @(" @(" @(" @9G!R:6YT9BAF97)R+")0
M;VEN=&5R(’@E<"!O=F5R<G5N7&XB+’!T<BD[“B @(” @(" @(" @(&=O=&@
M97)R,CL*(" @(" @?0H@(" @("!M96U?;G5M86QL;V,@+3T@&QO;F<I9&PM
M/FYB>71E<SL
(" @(" @:68@&UE;5]N=6UA;&QO8R (# I"B @(" @('L@
M(" @(&9P<FEN=&8H9F5R<BPB97)R;W(Z(&UE;5]N=6UA;&QO8R ](“5L9"P@
M9&PM/FYB>71E<R ](“5D7&XB+ H@(” @(” @(" @(" @(" @("!M96U?;G5M
M86QL;V,L9&PM/FYB>71E<RD[“B @(” @(" @(" @(&=O=&@97)R,CL
(" @
M(" @?0H*(" @(" @+RH@4F5M;W9E(&1L(&9R;VT@;&EN:V5D(&QI<W0@B*
M(" @(" @:68@
&1L+3YP<F5V0H@(" @(" @(" @("!D;“T^<’)E=BT^;F5X
M=” ](&1L+3YN97AT.PH@(" @("!I9B H9&PM/FYE>'0I"B @(" @(" @(" @
M(&1L+3YN97AT+3YP<F5V(#T@9&PM/G!R978["@H@(" @(" O
B!3=&]M<"!O
M;B!T:&4@9G)E960@<W1O<F%G92!T;R!H96QP(&1E=&5C="!R969E<F5N8V5S
M(" @(" J+PH@(" @(" OB!A9G1E<B!T:&4@<W1O<F%G92!W87,@9G)E960N
M(" @(" @(" @(" @(" @(" @(" @(" J+PH@(" @("!M96US970H
’9O:60@
MBD@9&PL0D%$5D%,+’-I>F5O9B@J9&PI("L@9&PM/FYB>71E<RD[“B @(” @
M(&UE;5]C;W5N="TM.PH
(" @(" @+RH@4V]M92!C;VUP:6QE<G,@8V%N(&1E
M=&5C="!E<G)O<G,@:6X@=&AE(&AE87 N(" @(" @B*(" @(" @9G)E92@H
M=F]I9" J
2!D;“D[“B @(” @(’)E='5R;CL*“F5R<C(Z"B @(” @(&UE;5]P
M<FEN=&1L*&1L3L97)R.@H@(” @("!F<’)I;G1F*&9E<G(L(F9R964G9"!F
M<F]M("(I.PH@(" @("!M96U?9FEL;&EN*&9I;“QL:6XI.PHOFQI;G0@+64U
M,#8@B*(" @(" @87-S97)T# I.PHO
FQI;G0@V4U,#8@B*(" @(" @
M+RH@3D]44D5!0TA%1" J+PI]"@HO
BHJ
BHJBHJBHJBHJBHJ*@H@B!$
M96)U9R!V97)S:6]N(&]F(&UE;5]R96%L;&]C
"DN"B J+PH*=F]I9” J;65M
M7W)E86QL;V-?9&5B=6<H(‘9O:60@F]L9’ L('5N<VEG;F5D(&XL(&-H87(@
M
F9I;“P@:6YT(&QI;BD*>R @('9O:60@G [“B @(”!S=’)U8W0@9&5B=6=?
M;65M("ID;#L
"B @(”!I9B H;B ]/2 P0H@(" @>R!M96U?9G)E95]D96)U
M9RAO;&1P+&9I;“QL:6XI.PH@(” @("!P(#T@3E5,3#L
(" @(‘T*(" @(&5L
M<V4@:68@&]L9’ @/3T@3E5,3"D(" @(" @<" ](&UE;5]M86QL;V-?9&5B
M=6<H;BQF:6PL;&EN3L(" @(&5L<V4*(" @(‘L*(" @(" @<" ](&UE;5]M
M86QL;V-?9&5B=6<H;BQF:6PL;&EN3L(" @(" @:68@’ @(3T@3E5,3"D
M(" @(" @>PH@(" @(" @(" @9&P@/2!M96U?<‘1R=&]D;“AO;&1P3L(” @
M(" @(" @(&EF(“AD;“T^;F)Y=&5S(#P@;BD*(” @(” @(" @(" @;B ](&1L
M+3YN8GET97,[“B @(” @(" @("!M96UC<‘DH<“QO;&1P+&XI.PH@(” @(" @
M(" @;65M7V9R965?9&5B=6<H;VQD<“QF:6PL;&EN3L(” @(" @?0H@(" @
M?0H@(" @<F5T=7)N(’ [“GT*“B\JBHJBHJBHJBHJBHJBHJBHJBHJ
MBHO"@IV;VED(&UE;5]C:&5C:RAV;VED0I[(” @<F5G:7-T97(@<W1R=6-T
M(&1E8G5G7VUE;2 J9&P[”@H@(" @9F]R(“AD;” ](&UE;5]A;&QO8VQI<W0N
M;F5X=#L@9&P@(3T@3E5,3#L@9&P@/2!D;“T^;F5X=“D*(” @(” @;65M7V-H
M96-K<‘1R*&UE;5]D;‘1O<‘1R*&1L2D["GT"B\JBHJBHJBHJBHJBHJ
M
BHJBHJBHJBHO"@IV;VED(&UE;5]C:&5C:W!T<BAV;VED("IP0I[(" @
M<W1R=6-T(&1E8G5G7VUE;2 J9&P["@H@(" @9F]R(“AD;” ](&UE;5]A;&QO
M8VQI<W0N;F5X=#L@9&P@(3T@3E5,3#L@9&P@/2!D;“T^;F5X=“D*(” @('L*
M(” @(" @:68@’ @/CT@‘9O:60@BD@)BAD;"T^9&%T85LP72D@)B8(" @
M(" @(" @(’ @/" H=F]I9" J2@H8VAA<B J61L("L@<VEZ96]F*’-T<G5C
M="!D96)U9U]M96TI+3$@R!D;"T^;F)Y=&5S2D*(" @(" @(" @(&=O=&@
M3#$[“B @(”!]“B\J;&EN=” M934P-B J+PH@(" @87-S97)T*# I.PHOFQI
M;G0@V4U,#8@B*“DPQ.@H@(” @9&P@/2!M96U?<'1R=&]D;"AP3L(" @
M(&EF("AD;“T^8F5F;W)E=F%L(”$]($)%1D]2159!3"D
(" @(‘L*(" @(" @
M(" @(&9P<FEN=&8H9F5R<BPB4&]I;G1E<B!X)7 @=6YD97)R=6Y<;B(L<“D[
M"B @(” @(" @("!G;W1O(&5R<C([“B @(”!]“B @(”!I9B HBAU;G-I9VYE
M9"!L;VYG("HI("9D;"T^9&%T85MD;"T^;F)Y=&5S72 A/2!!1E1%4E9!3"D

M(" @(‘L*(" @(" @(" @(&9P<FEN=&8H9F5R<BPB4&]I;G1E<B!X)7 @;W9E
M<G)U;EQN(BQP3L(" @(" @(" @(&=O=&@97)R,CL*(" @(‘T*(" @(’)E
M=‘5R;CL*“F5R<C(Z"B @(”!M96U?<’)I;G1D;“AD;“D[“B\J;&EN=” M934P
M-B J+PH@(” @87-S97)T*# I.PHOFQI;G0@V4U,#8@B*?0H(V5L<V4
M"B\J
BHJBHJBHJBHJBHJBHJBHJBHJBHO”@IV;VED(“IM96U?;6%L
M;&]C*”!U;G-I9VYE9"!N=6UB>71E<RD*>R @(" @=F]I9" J<#L*“B @(” @
M(&EF(“AN=6UB>71E<R ]/2 P0H@(" @(" @(" @("!R971U<FX@3E5,3#L
M(” @(" @=VAI;&4@#$I"B @(" @('L(" @(" @(" @(" @<" ](&UA;&QO
M8RAN=6UB>71E<RD[“B @(” @(" @(" @(&EF(“AP(#T]($Y53$PI"B @(” @
M(" @(" @(‘L@(" @(&EF(“AM96U?97AC97!T:6]N*“DI"B @(” @(” @(" @
M(" @(" @(" @(" @(&-O;G1I;G5E.PH@(" @(" @(" @("!]“B @(” @(" @
M(" @(&5L<V4*(" @(" @(" @(" @(" @(" @;65M7V-O=6YTRL[“B @(” @
M(" @(" @(&)R96%K.PH@(" @("!]“B @(” @("\J<’)I;G1F
")M86QL;V,H
M)60I(#T@>“5L>%QN(BQN=6UB>71E<RQP3LJ+PH@(" @("!R971U<FX@<#L
M?0H*+RHJBHJBHJBHJBHJBHJBHJBHJBHJB*“G9O:60@FUE;5]C
M86QL;V,H('5N<VEG;F5D(&YU;6)Y=&5S
0I[(” @("!V;VED("IP.PH
(” @
M(" @:68@&YU;6)Y=&5S(#T](# I"B @(" @(" @(" @(’)E='5R;B!.54Q,
M.PH@(" @("!W:&EL92 H,2D
(" @(" @>PH@(" @(" @(" @("!P(#T@8V%L
M;&]C*&YU;6)Y=&5S+#$I.PH@(" @(" @(" @("!I9B H<" ]/2!.54Q,0H@
M(" @(" @(" @("![(" @("!I9B H;65M7V5X8V5P=&EO;B@I
0H@(" @(" @
M(" @(" @(" @(" @(" @("!C;VYT:6YU93L*(" @(" @(" @(" @?0H@(" @
M(" @(" @("!E;’-E"B @(" @(" @(" @(" @(" @(&UE;5]C;W5N=“LK.PH@
M(” @(" @(" @("!B<F5A:SL*(" @(" @?0H@(" @(" OG!R:6YT9B@B8V%L
M;&]C
"5D2 ](’@E;'A<;B(L;G5M8GET97,L<"D[B*(" @(" @<F5T=7)N
M(’ ["GT
"B\J
BHJBHJBHJBHJBHJBHJBHJBHJBHO"@IV;VED(“IM
M96U?<F5A;&QO8R@@=F]I9” J;VQD;65M7W!T<BP@=6YS:6=N960@;F5W;G5M
M8GET97,I"GL@("!V;VED(“IP.PH*(” @(&EF(“AO;&1M96U?<'1R(#T]($Y5
M3$PI"B @(” @(’ @/2!M96U?;6%L;&]C*&YE=VYU;6)Y=&5S3L(" @(&5L
M<V4@:68@&YE=VYU;6)Y=&5S(#T](# I"B @("![(&UE;5]F<F5E&]L9&UE
M;5]P=’(I.PH@(" @("!P(#T@3E5,3#L*(" @(‘T*(" @(&5L<V4*(" @(‘L*
M(" @(" @9&*(" @(" @(" @(’ @/2!R96%L;&]C*&]L9&UE;5]P=’(L;F5W
M;G5M8GET97,I.PH@(" @("!W:&EL92 H<" ]/2!.54Q,("8F(&UE;5]E>&-E
M<‘1I;VXH2D[“B @(”!]“B @(” OG!R:6YT9B@B<F5A;&QO8RAX)6QX+“5D
M2 ](’@E;'A<;B(L;VQD;65M7W!T<BQN97=N=6UB>71E<RQP3LJ+PH@(” @
M<F5T=7)N(’ ["GT*“B\JBHJBHJBHJBHJBHJBHJBHJBHJBHO"@IV
M;VED(&UE;5]F<F5E
”!V;VED("IP=’(I"GL*(" @("\J<’)I;G1F*")F<F5E
M*’@E;’@I7&XB+’!T<BD[B*(" @(&EF("AP=’(@(3T@3E5,3"D(" @(‘L@
M87-S97)T*&UE;5]C;W5N=" ^(# I.PH@(" @("!M96U?8V]U;G0M+3L*(" @
M(" @9G)E92AP=’(I.PH@(" @?0I]"@HC96YD:68@+RH@1$5"54=?345-(“HO
M”@HOBHJBHJBHJBHJBHJBHJBHJBHJBHJ+PH=F]I9"!M96U?:6YI
M=“AV;VED0I[“B @(” @(&EF(“AM96U?:6YI=&5D(#T](# I"B @(” @('L@
M(" @(&UE;5]C;W5N=" ](# ["B-I9B!D969I;F5D
$1%0E5’7TU%32D@“B @
M(” @(” @(" @(&UE;5]N=6UA;&QO8R ](# [“B @(” @(" @(" @(&UE;5]M
M87AA;&QO8R ](# [“B @(” @(" @(" @(&UE;5]A;&QO8VQI<W0N;F5X=" ]
M($Y53$P[“B-E;F1I9@H@(” @(" @(" @("!M96U?:6YI=&5DRL["@H@(" @
M("!]"@I]"@HO
BHJBHJBHJBHJBHJBHJBHJBHJBHJ+PH*=F]I9"!M
M96U?=&5R;2AV;VED0I["@H)“B @(” @(&EF("AM96U?:6YI=&5D0H@(" @
M("![“B-I9B!D969I;F5D*$1%0E5’7TU%32D@“B @(” @(” @(" @(’)E9VES
M=&5R(’-T<G5C="!D96)U9U]M96T@F1L.PH(" @(" @(" @(" @9F]R(“AD
M;” ](&UE;5]A;&QO8VQI<W0N;F5X=#L@9&P[(&1L(#T@9&PM/FYE>'0I"B @
M(" @(" @(" @('L@(" @(&9P<FEN=&8H9F5R<BPB56YF<F5E9"!P;VEN=&5R
M.B B3L(" @(" @(" @(" @(" @(" @;65M7W!R:6YT9&PH9&PI.PH@(" @
M(" @(" @("!]“B-I9B P"B @(” @(" @(" @(&9P<FEN=&8H9F5R<BPB36%X
M(&%M;W5N="!E=F5R(&%L;&]C871E9" ]/2 E;&0@8GET97-<;B(L"B @(" @
M(" @(" @(" @(" @(&UE;5]M87AA;&QO8RD[“B-E;F1I9@HC96QS90H@(” @
M(" @(" @("!I9B H;65M7V-O=6YT0H@(" @(" @(" @(" @(" @("!F<’)I
M;G1F
&9E<G(L(B5D('5N9G)E960@:71E;7-<;B(L;65M7V-O=6YT3L(" @
M(" @(" @(" @:68@&UE;5]S8V]U;G0I"B @(" @(" @(" @(" @(" @(&9P
M<FEN=&8H9F5R<BPB)60@=6YF<F5E9"!S(&ET96US7&XB+&UE;5]S8V]U;G0I
M.PHC96YD:68@+RH@1$5"54=?345-(“HO"B @(” @(" @(" @(&%S<V5R=“AM
M96U?8V]U;G0@/3T@,” F)B!M96U?<V-O=6YT(#T](# I.PH@(" @(" @(" @
M("!M96U?:6YI=&5D(#T@,#L
(" @(" @?0H*+R)9G!R:6YT9BAF97)R+" B
M;65M;W)Y(&-H96-K(&-O;7!L971E9%QN(BD["GT*"B-U;F1E9B!N97AT"B-U
M;F1E9B!P<F5V"B-U;F1E9B!F:6QE"B-U;F1E9B!L:6YE"B-U;F1E9B!N8GET
497,*(W5N9&5F(&)E9F]R979A; H
end

begin 666 mem.h
M+RH@RLK1&%T92!L87-T(&UO9&EF:65D.B P-2U=6PM,3DY-R J+PH*+RH*
MBH@(%1H:7,@:7,@82!C;W!Y<FEG:‘1E9"!W;W)K(’=H:6-H(&ES(&9U;F-T
M:6]N86QL>2!I9&5N=&EC86P@=&@=V]R:PHJ
B @;W)I9VEN86QL>2!P=6)L
M:7-H960@:6X@36EC<F@0V]R;G5C;W!I82!M86=A>FEN92 H:7-S=64@(S4R
M+"!-87)C:“U!<’)I;“P**BH@(#$Y.3 I(&%N9”!I<R!F<F5E;'D@;&EC96YS
M960@8GD@=&AE(&%U=&AO<BP@5V%L=&5R($)R:6=H=“P@9F]R(&%N>2!U<V4N
M"BHO”@HOE@;65M+F@@("!&<FD@36%Y(#(V(#$Y.#D@("!-;V1I9FEE9"!B
M>3H@5V%L=&5R($)R:6=H=" J+PHO
B!#;W!Y<FEG:'0@,3DX-BTQ.3@X(&)Y
M($YO<G1H=V5S=”!3;V9T=V%R92 @(" J+PHOB!!;&P@4FEG:'1S(%)E<V5R
M=F5D(" @(" @(" @(" @(" @(" @(" J+PHO
B!7<FET=&5N(&)Y(%=A;'1E
M<B!"<FEG:'0@(" @(" @(" @(" @(" J+PH*(VEF;F1E9B!-14U?2 HC9&5F
M:6YE($U%35]((" @(" Q"@H*(VEF9&5F(%]?8W!L=7-P;'5S"F5X=&5R;B B
M0R(@>PHC96YD:68*“B-I9FYD968@5$]/3$M)5%](“B-I;F-L=61E(” @(”)T
M;V]L:VET+F@B"B-E;F1I9@H*“B-D969I;F4@1$5"54=?345-“3$"B\J"B J
M($UE;6]R>2!M86YA9V5M96YT(’)O=71I;F5S+@H@
@H@B!#;VUP:6QI;F<Z
M"B J"B J(" @("-D969I;F4@1$5"54<@,2!W:&5N(&-O;7!I;&EN9R!T;R!E
M;F%B;&4@97AT96YD960@9&5B=6=G:6YG"B J(" @(&9E871U<F5S+@H@
@H@
MB!&96%T=7)E<R!A;’=A>7,@96YA8FQE9#H(“H*(“H@(” @;R!M96U?:6YI
M=”@I(&ES(&-A;&QE9”!A=”!S=&%R='5P+"!A;F0@;65M7W1E<FTH2!A= H@
M
B @(" @(&-L;W-E+"!W:&EC:"!C:&5C:W,@=&@<V5E(‘1H870@=&AE(&YU
M;6)E<B!O9B!A;&QO8R=S(&ES"B J(" @(" @=&AE(’-A;64@87,@=&AE(&YU
M;6)E<B!O9B!F<F5E)W,N"B J(" @(&@0F5H879I;W(@;VX@;W5T+6]F+6UE
M;6]R>2!C;VYD:71I;VYS(&-A;B!B92!C;VYT<F]L;&5D"B J(" @(" @=FEA
M(&UE;5]S971E>&-E<‘1I;VXH2X(“H*(“H@17AT96YD960@9&5B=6=G:6YG
M(&9E871U<F5S.@H@@H@B @("!O($5N86)L975D(&)Y("-D969I;F4@1$5"
M54=?345-(#$@=VAE;B!C;VUP:6QI;F<N"B J(" @(&@0VAE8VL@=F%L=65S
M(&%R92!I;G-E<G1E9"!B969O<F4@86YD(&%F=&5R(‘1H92!A;&QO8R=E9"!D
M871A"B J(" @(" @=&@9&5T96-T(’!O:6YT97(@=6YD97)R=6YS(&%N9"!O
M=F5R<G5N<RX
(“H@(” @;R!&<F5E)V0@<&]I;G1E<G,@87)E(&-H96-K960@
M86=A:6YS="!A;&QO8R=E9"!P;VEN=&5R<RX
(“H@(” @;R!&<F5E)V0@<W1O
M<F%G92!I<R!C;&5A<F5D(‘1O(’-M;VME(&]U=”!R969E<F5N8V5S('1O(&9R
M964G9”!D871A+@H@B @("!O(%)E86QL;V,G9"!P;VEN=&5R<R!A<F4@86QW
M87ES(&-H86YG960L(&%N9"!T:&4@<’)E=FEO=7,@<W1O<F%G90H@B @(" @
M(&ES(&-L96%R960L('1O(&1E=&5C="!E<G)O;F5O=7,@9&5P96YD96YC:65S
M(&]N(‘1H92!P<F5V:6]U<PH@B @(" @(’!O:6YT97(N"B J(" @(&@5&AE
M(’)O=71I;F4@;65M7V-H96-K<'1R
"D@:7,@<’)O=FED960@=&@8VAE8VL@
M86X@86QL;V,G960
(“H@(” @("!P;VEN=&5R+@H@B*"B\JBHJ
BHJBHJ
M
BHJBHJBHJBH@1TQ/0D%,(%9!4DE!0DQ%4R JBHJBHJBHJBHJBHJ
MBHJBHJBHJ+PH97AT97)N(&EN="!M96U?:6YI=&5D.R @(" @(" @+RH@
M(3T@,"!I9B!M96T@<&%C:V%G92!I<R!I;FET:6%L:7IE9"X@(" @B*(" @
M(" @(" @(" @(" @(" @(" @(" @+RH@5&5S="!T:&ES(&EF(‘EO=2!H879E
M(&]T:&5R(’!A8VMA9V5S(" @B*(" @(" @(" @(" @(" @(" @(" @(" @
M+RH@=&AA="!D97!E;F0@;VX@;65M(&)E:6YG(&EN:71I86QI>F5D(" @B*
M# HO
BHJ
BHJ
BHJBHJBHJBHJBHJ(%!50DQ)0R!&54Y#5$E/3E,@BHJ
M
BHJBHJBHJBHJBHJBHJBHJB*"B\JBHJBHJBHJBHJBHJBHJ
M
BHJBHJBHJBHJBHJ*@H@B!3970@8F5H879I;W(@=VAE;B!M96T@<G5N
M<R!O=70@;V8@;65M;W)Y+@H@B!);G!U=#H(“H@(” @9FQA9R ](" @(" @
M345-7T%“3U)435-’.B @(” @06)O<G0@=&AE(’!R;V=R86T@=VET:"!T:&4@
M;65S<V%G90H@B @(" @(" @(" @(" @(" @(" @(" G1F%T86P@97)R;W(Z
M(&]U="!O9B!M96UO<GDG(’-E;G0
(“H@(” @(" @(" @(" @(" @(" @(" @
M=&@<W1D;W5T+B!4:&ES(&ES('1H92!D969A=6QT(&)E:&%V:6]R+@H@B @
M(" @(" @("!-14U?04)/4E0Z("!!8F]R="!T:&4@<’)O9W)A;2!W:71H(&YO
M(&UE<W-A9V4N"B J(" @(" @(" @($U%35]2151.54Q,.B @(" @(%)E='5R
M;B!.54Q,(&)A8VL@=&@8V%L;&5R+@H@B @(" @(" @("!-14U?0T%,3$90
M.B!#86QL(&%P<&QI8V%T:6]N+7-P96-I9FEE9"!F=6YC=&EO;BX
(“H@(” @
M(" @(" @(" @(" @(" @(" @9G @;75S="!B92!S=7!P;&EE9"X
(“H@(” @
M9G @(" @(" @(" @(" @(" @3W!T:6]N86P@9G5N8W1I;VX@<&]I;G1E<BX@
M4W5P<&QI960@:68
(“H@(” @(" @(" @(" @(" @(" @(" @&9L86<@/3T@
M345-7T-!3$Q&4"DN(%1H:7,@9G5N8W1I;VX@<F5T=7)N<PH@B @(" @(" @
M(" @(" @(" @(" @("!-14U?6%A86%@L(&EN9&EC871I;F<@=VAA="!M96T@
M<VAO=6QD(&1O(&YE>'0N"B J(" @(" @(" @(" @(" @(" @(" @(%1H92!F
M=6YC=&EO;B!C;W5L9"!D;R!T:&EN9W,@;&EK92!S=V%P"B J(" @(" @(" @
M(" @(" @(" @(" @(&1A=&$@;W5T('1O(&1I<VL@=&@9G)E92!U<"!M;W)E
M(&UE;6]R>2X
(“H@(” @9G @8V]U;&0@86QS;R!R971U<FXZ"B J(" @(" @
M(" @($U%35]2151263H@(%1R>2!A9V%I;B!T;R!A;&QO8V%T92!T:&4@<W!A
M8V4N($)E"B J(" @(" @(" @(" @(" @(" @(" @(&-A<F5F=6P@;F]T('1O
M(&=O(&EN=&@86X@:6YF:6YI=&4@;&]O<"X
(“HO”@HC9&5F:6YE($U%35]!
M0D]25$U31R @(" P"B-D969I;F4@345-7T%“3U)4(#$(V1E9FEN92!-14U?
M4D543E5,3" @(" @,@HC9&5F:6YE($U%35]#04Q,1E @(" @(" S"B-D969I
M;F4@345-7U)%5%)9(#0
=F]I9”!M96U?<V5T97AC97!T:6]N(“AI;G0L(&EN
M=”@J2AV;VED2D["@H*=F]I9"!M96U?:6YI=" H=F]I9" I.PH*+RHJBHJ
M
BHJBHJBHJBHJBHJBHJBHJ*@H@B!497)M:6YA=&4@;65M;W)Y(&AA
M;F1L97(N(%5S969U;"!F;W(@8VAE8VMI;F<@9F]R(&5R<F]R<RX
(“H@57-E
M.@H@B @("!V;VED(&UE;5]T97)M’9O:60I.PH@B!/=71P=70Z"B J(" @
M(&UE;5]I;FET960@/2 P"B J+PH
=F]I9”!M96U?=&5R;2 H=F]I9"D@.PH*
M+RH@5&AE(&9O;&QO=VEN9R!S=‘5F9B!F;W)M<R!T:&4@:6UP;&5M96YT871I
M;VX@<F%T:&5R(‘1H86X@=&AE"B J(&1E9FEN:71I;VXL(’-O(&EG;F]R92!I
M=“X*(“HO”@HC:68@9&5F:6YE9"A$14)51U]-14TI(” @(" @("\J(&EF(&-R
M96%T:6YG(&1E8G5G(‘9E<G-I;VX@("HO"B-D969I;F4@;65M7W-T<F1U<"AP
M2 @(&UE;5]S=’)D=7!?9&5B=6<H’ I+%]?1DE,15]?+%]?3$E.15]?0HC
M9&5F:6YE(&UE;5]M86QL;V,H=2D@("!M96U?;6%L;&]C7V1E8G5G
"AU2Q?
M7T9)3$5?7RQ?7TQ)3D5?7RD
(V1E9FEN92!M96U?8V%L;&]C*‘4I(" @;65M
M7V-A;&QO8U]D96)U9R@H=2DL7U]&24Q%7U\L7U],24Y%7U\I"B-D969I;F4@
M;65M7W)E86QL;V,H<“QU2 @(" @(&UE;5]R96%L;&]C7V1E8G5G"AP2PH
M=2DL7U]&24Q%7U\L7U],24Y%7U\I"B-D969I;F4@;65M7V9R964H<“D@(” @
M(&UE;5]F<F5E7V1E8G5G
"AP2Q?7T9)3$5?7RQ?7TQ)3D5?7RD"F-H87(@
MFUE;5]S=’)D=7!?9&5B=6<@(“AC;VYS=”!C:&%R("HL8VAA<B J+&EN="D[
M"G9O:60@FUE;5]C86QL;V-?9&5B=6<@("AU;G-I9VYE9"QC:&%R("HL:6YT
M
3L
=F]I9” J;65M7VUA;&QO8U]D96)U9R @'5N<VEG;F5D+&-H87(@BQI
M;G0I.PIV;VED(“IM96U?<F5A;&QO8U]D96)U9R H=F]I9” J+'5N<VEG;F5D
M+&-H87(@BQI;G0I.PIV;VED("!M96U?9G)E95]D96)U9R @(" H=F]I9" J
M+&-H87(@BQI;G0I.PIV;VED("!M96U?9G)E969P(" H=F]I9" J3L
"G9O
M:60@;65M7W-E=&YE=V9I;&5L:6YE("AV;VED(“HL8VAA<B J+&EN=“D[”@IV
M;VED(&UE;5]C:&5C:W!T<B H=F]I9” J<'1R
3L
=F]I9"!M96U?8VAE8VLH
M=F]I9"D["@HC96QS90H*+RHJBHJBHJBHJBHJBHJBHJBHJBHJBH
M("H@06QL;V-A=&4@<W!A8V4@9F]R(’-T<FEN9RP@8V]P>2!S=’)I;F<@:6YT
M;R!I="P@86YD"B J(’)E='5R;B!P;VEN=&5R('1O(‘1H92!N97<@<W1R:6YG
M+@H@B!4:&ES(’)O=71I;F4@9&]E<VXG="!R96%L;‘D@8F5L;VYG(&AE<F4L
M(&)U="!I="!I<R!U<V5D(’-O(&]F=&5N"B J('1H870@22!G879E('5P(&%N
M9"!P=70@:70@:&5R92X
("H@57-E.@H@B @("!C:&%R("IM96U?<W1R9’5P
M
&-O;G-T(&-H87(@G,I.PH@B!2971U<FYS.@H@B @("!P;VEN=&5R(‘1O
M(&-O<&EE9"!S=’)I;F<@:68@<W5C8V5S<V9U;"X
(“H@(” @96QS92!R971U
M<FYS($Y53$P@
&EF($U%35]2151.54Q,0H@B*"F-H87(@FUE;5]S=’)D
M=7 @
&-O;G-T(&-H87(@BD["@HOBHJ
BHJ
BHJ
BHJBHJBHJBHJBHJ
MBH("H@1G5N8W1I;VX@<V@=V4@8V%N(&AA=F4@82!P;VEN=&5R(‘1O(&9U
M;F-T:6]N(&UE;5]F<F5E*"DN"B J(%1H:7,@:7,@;F5E9&5D(’-I;F-E(&UE
M;5]F<F5E(&ES(’-O;65T:6UE<R!D969I;F5D(&%S(&$@;6%C<F\L"B J(&%N
M9"!T:&5N('1H92!P<F5P<F]C97-S;W(@<V-R97=S('5P+@H@B!4:&4@<&]I
M;G1E<B!T;R!M96U?9G)E92@I(&ES('5S960@9G)E<75E;G1L>2!W:71H(‘1H
M92!L:7-T(’!A8VMA9V4N"B J(%5S93H
(“H@(” @=F]I9"!M96U?9G)E969P
M*‘9O:60@G I.PH@B*"B\JBHJBHJBHJBHJBHJBHJBHJBHJBH
M(“H@0VAE8VL@9F]R(&5R<F]R<RX@5&AI<R!R;W5T:6YE(&1O97,@82!C;VYS
M:7-T96YC>2!C:&5C:R!O;B!T:&4*(“H@<W1O<F%G92!A;&QO8V%T;W(L(&QO
M;VMI;F<@9F]R(&-O<G)U<'1E9”!D871A+B!)=”!S:&]U;&0@8F4@8V%L;&5D
M"B J(’=H96X@=&AE(&%P<&QI8V%T:6]N(&AA<R!#4%4@8WEC;&5S('1O(&)U
M<FXN"B J(%5S93H*(“H@(” @=F]I9"!M96U?8VAE8VLH=F]I9"D[“B J+PH*
M=F]I9”!M96U?8VAE8VL@'9O:60@3L"B\JBHJBHJBHJBHJBHJBHJ
M
BHJBHJBH*(“H@0VAE8VL@<'1R(‘1O(’-E92!I9B!I=”!I<R!I;B!T:&4@
M<F%N9V4@;V8@86QL;V-A=&5D(&1A=&$N"B J($-A=7-E(&%S<V5R=&EO;B!F
M86EL=7)E(&EF(&ET(&ES;B=T+@H@B*"@HOBHJBHJBHJBHJBHJBHJ
M
BHJBHJBHJ"B J($%L;&]C871E(&%N9"!R971U<FX@82!P;VEN=&5R(‘1O
M(&YU;6)Y=&5S(&]F(’-T;W)A9V4N"B J(%5S93H*(“H@(” @=F]I9" J;65M
M7VUA;&QO8RAU;G-I9VYE9"!N=6UB>71E<RD[“B J(” @('9O:60@FUE;5]C
M86QL;V,H=6YS:6=N960@;G5M8GET97,I.R!A;&QO8V%T960@;65M;W)Y(&ES
M(&-L96%R960
(“H@26YP=70Z"B J(” @(&YU;6)Y=&5S(" @($YU;6)E<B!O
M9B!B>71E<R!T;R!A;&QO8V%T90H@B!2971U<FYS.@H@B @("!I9B H;G5M
M8GET97,@/B P
0H@B @(" @(" @("!P;VEN=&5R('1O(&%L;&]C871E9"!D
M871A+"!.54Q,(&EF(&]U="!O9B!M96UO<GD
(“H@(” @96QS90H@B @(" @
M(" @("!R971U<FX@3E5,3 H@B*"G9O:60@FUE;5]M86QL;V,@'5N<VEG
M;F5D
3L
=F]I9" J;65M7V-A;&QO8R H=6YS:6=N960I.PH
+RHJBHJBHJ
MBHJBHJBHJBHJBHJBHJBHJ"B J(%)E86QL;V-A=&4@;65M;W)Y+@H@
M
B!5<V4Z"B J(" @(‘9O:60@FUE;5]R96%L;&]C’9O:60@G!T<BQU;G-I
M9VYE9"!N=6UB>71E<RD["B J+PH
=F]I9" J;65M7W)E86QL;V,@'9O:60@
M
BQU;G-I9VYE9"D["@HOBHJBHJBHJBHJBHJBHJBHJBHJBHJBH*
M(“H@1G)E92!M96UO<GD@86QL;V-A=&5D(&)Y(&UE;5]M86QL;V,H2P@;65M
M7V-A;&QO8R@I(&]R(&UE;5]R96%L;&]C
"DN"B J(%5S93H*(“H@(” @=F]I
M9”!M96U?9G)E92AV;VED("IP=’(I.PH@B*"G9O:60@;65M7V9R964@'9O
M:60@BD["@HOBHJBHJBHJBHJBHJBHJBHJBHJBHJ"B J($EN:71I
M86QI>F4@;65M;W)Y(&AA;F1L97(N"B J(%5S93H*(“H@(” @=F]I9"!M96U?
M:6YI=“AV;VED3L(“H@3W5T<'5T.@H@B @("!M96U?:6YI=&5D(#T@,0H@
M
B*“B-D969I;F4@;65M7V9R965F<” @(” @(&UE;5]F<F5E"B-D969I;F4@
M;65M7V-H96-K<‘1R*’ I”@HC96YD:68@+RH@1$5"54<@B*"B-I9F1E9B!?
I7V-P;'5S<&QU<PI]"B-E;F1I9@H
(V5N9&EF("\J($U%35]((“HO”@H
end

begin 666 toolkit.h
M+RH@RLK1&%T92!L87-T(&UO9&EF:65D.B P-2U=6PM,3DY-R J+PH*+RH*
MBH@(%1H:7,@:7,@82!C;W!Y<FEG:‘1E9"!W;W)K(’=H:6-H(&ES(&9U;F-T
M:6]N86QL>2!I9&5N=&EC86P@=&@=V]R:PHJ
B @;W)I9VEN86QL>2!P=6)L
M:7-H960@:6X@36EC<F@0V]R;G5C;W!I82!M86=A>FEN92 H:7-S=64@(S4R
M+"!-87)C:“U!<’)I;“P**BH@(#$Y.3 I(&%N9”!I<R!F<F5E;'D@;&EC96YS
M960@8GD@=&AE(&%U=&AO<BP@5V%L=&5R($)R:6=H=“P@9F]R(&%N>2!U<V4N
M"BHO”@HOE@=&]O;&MI=“YH(” @5’5E($%P<B Q." Q.3@Y(" @36]D:69I
M960@8GDZ(%=A;'1E<B!"<FEG:'0@B*"B-I9FYD968@5$]/3$M)5%](“B-D
M969I;F4@5$]/3$M)5%](”@HO
B!$969I;F4@<W1U9F8@=&AA="=S(&1I9F9E
M<F5N="!B971W965N(&UA8VAI;F5S+@H@B!04D]43U194$E.1R @(" @(" @
M(" Q(&EF(&-O;7!I;&5R(’-U<’!O<G1S(’!R;W1O=‘EP:6YG"B J($A/4U1"
M651%4U=!4%!%1" @(" @(#$@:68@;VX@=&AE(&AO<W0@;6%C:&EN92!T:&4@
M8GET97,@87)E"B J(" @(" @(" @(" @(" @(’-W87!P960@
#$@9F]R(#8X
M,#DL(#8X,# P+" P(&9O<B X,#@X"B J(" @(" @(" @(" @(" @(&%N9"!6
M05@I+@H@B*"B-I9B!D969I;F5D$U31$]3
2!?”!D969I;F5D*%]?35-$
M3U-?7RD*(V1E9FEN92!04D]43U194$E.1R @(" @,0HC9&5F:6YE($A/4U1"
M651%4U=!4%!%1" P"@HC9&5F:6YE($))5%-015)“651%(#@(V1E9FEN92!3
M25I%3T9)3E0@("!S:7IE;V8H:6YT
0HC9&5F:6YE(%-)6D5/1DQ/3D<@(’-I
M>F5O9BAL;VYG0H(V5L<V4*(VEF9&5F($U?54Y)6” @(" @+RH@4T-/(%5.
M25@@=7-I;F<@36EC<F]S;V9T($,N(“HO"B-D969I;F4@4%)/5$]465!)3D<@
M(” @(#$(V1E9FEN92!(3U-40EE415-705!0140@, HC9&5F:6YE($58251?
M4U5#0T534R @(" P"B-D969I;F4@15A)5%]&04E,55)%(" @(#$
“B-D969I
M;F4@0DE44U!%4D)95$4@. HC9&5F:6YE(%-)6D5/1DE.5” @(’-I>F5O9BAI
M;G0I"B-D969I;F4@4TE:14]&3$].1R @<VEZ96]F*&QO;F<I"B-E;’-E(" @
M(" @(" @(" @(" @(" @("\J($Y/5$4Z(&AO<W0N:"!I<R J3D]4B!I;F-L
M=61E9"!I;B!33DE04$544R @(" J+PHO+R-I;F-L=61E(" @(")H;W-T+F@B
M(" @("\J($-O;7!I;&5R+V5N=FER;VYM96YT+7-P96-I9FEC(’-T=69F(&=O
M97,@:&5R92 J+PHC96YD:68
"B-E;F1I9@H*+RH@4W1A=&EC(&1E9FEN:71I
M;VYS(&1O(&YO="!A<’!E87(@:6X@=&AE(&QI;FME<B N34%0(&9I;&4N($]V
M97)R:61E(" @B*+RH@=&AE(&1E9FEN:71I;VX@:&5R92!T;R!M86ME('1H
M96T@9VQO8F%L(&EF(&YE8V5S<V%R>2X@(" @(" @(" @B*(VEF;F1E9B!3
M5$%424,
(V1E9FEN92!35$%424,@(" @<W1A=&EC"B-E;F1I9@H
(V1E9FEN
M92!A<G)A>7-I>F4H87)R87DI(" @(" @’-I>F5O9BAA<G)A>2D@+R!S:7IE
M;V8H87)R87E;,%TI
0H*+RH@36%C<F]S(’-O(‘1H870@=V4@8V%N(&1O(’!R
M;W1O=‘EP:6YG+"!B=70@<W1I;&P@=V]R:R!W:71H(&YO;BT@B*+RH@<’)O
M=&]T>7!I;F<@8V]M<&EL97)S.B @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @B*“B-I9B!04D]43U194$E.1PHC9&5F:6YE(% H<RD@(” @
M("!S"B-E;’-E"B-D969I;F4@4"AS
2 @(" @("@I"B-E;F1I9@H
(VEF9&5F
M($1%0E5’“B-D969I;F4@9&5B=6<H82D@(“AA0HC96QS90HC9&5F:6YE(&1E
F8G5G
&$I"B-E;F1I9@H*(V5N9&EF(”\J(%1/3TQ+251?2” J+PH
end

I forgot to mention that under NTO there is an equivalent
feature build in, check the doc under TechNotes I beleive

“Mario Charest” <mcharest@zinformatic.com> wrote in message
news:8patkm$50p$1@inn.qnx.com

Be warn that if you use thread under QNX4 memory allocation function
are NOT thread safe.

I have attached some code to this post. Link this with you code.
Replace all malloc/free with mem_malloc mem_free etc.

At any point terminate your process and call mem_term, this
function will tell you where (what line number ) a malloc was
done without a corresponding free.

Of course this will not check for malloc inside the c library.

“John Parsons” <> parsonsj@esi.com> > wrote in message
news:> 39B8DBC7.6638F25@esi.com> …
Hey Ya’ll,

Does anyone know of a good way to monitor code in real time to determine
memory loss through a thread or process. We seem to have sprung a leak
and believe that it is from an action that takes memory but does not
release it on completion of the task. Any GOOD ideas would be a great
help.

Thanks All
John
\

If I don’t know what process its from I just do a “sin mem” and watch for a
process that seems to be continually increasing the amount of memory being
used. Then to figure out which process it is do a “sin family” and figure
out where that process came from…

Jon

John Parsons <parsonsj@esi.com> wrote in message
news:39B8DBC7.6638F25@esi.com

Hey Ya’ll,

Does anyone know of a good way to monitor code in real time to determine
memory loss through a thread or process. We seem to have sprung a leak
and believe that it is from an action that takes memory but does not
release it on completion of the task. Any GOOD ideas would be a great
help.

Thanks All
John