ã“ã‚“ã«ã¡ã¯ã€sheepman ã§ã™ã€‚
DL::PtrData オブジェクトã§ã¯ ruby ㌠GC ã‚’ã™ã‚‹æ™‚ã«å‘¼ã¶
free function を指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
ã§ã€ãŸã¨ãˆã° regex ライブラリã 㨠regfree ã—ãŸã‚ã¨ã«ã€
free を呼ã³ãŸã„ã®ã§ã€ä»¥ä¸‹ã®ã‚ˆã†ãª DL.callback を使ã£ãŸã‚³ãƒ¼ãƒ‰ã‚’
書ããŸããªã‚Šã¾ã™ã€‚
require ‘dl’
include DL
h = dlopen(nil)
regcomp = h.sym(‘regcomp’, ‘IPSI’)
regfree = h.sym(‘regfree’, ‘0P’)
free = callback(‘0P’){|ptr|
regfree[ptr]
FREE[ptr]
}
100000.times do |i|
ptr = PtrData.malloc(50, free)
regcomp.call(ptr, ‘123’, 0)
end
ã—ã‹ã—ã€ã“れ㯠segv ã—ã¾ã™ã€‚åŽŸå› ã‚’æ£ç¢ºã«è¿½ã†ã“ã¨ãŒã§ãã¦ã„ãªã„ã®ã§ã™ãŒã€
ãŠãらã GC ã®çœŸæœ€ä¸ã«ãƒ–ãƒãƒƒã‚¯ãŒå‘¼ã°ã‚Œã‚‹ã“ã¨ã§èµ·ãã¦ã„ã‚‹ã‚“ã ã¨æ€ã„ã¾ã™ã€‚
ã¨ã„ã†ã‚ã‘ã§ã€DL::Symbol オブジェクトã«callbackã‹ã©ã†ã‹ã®ãƒ•ãƒ©ã‚°ã‚’æŒãŸã›ã¦ã€
callback 㯠PtrData ã® free 関数ã¨ã—ã¦æŒ‡å®šã§ããªã„よã†ã«ãƒ‘ッãƒã‚’書ã„ã¦ã¿ã¾ã—ãŸã€‚
segv ã—ã¦ã„ã‚‹åŽŸå› ãŒé•ã£ã¦ã„ã‚‹ãªã‚‰ã€ã“ã®ãƒ‘ッãƒã¯ç„¡ç”¨ã®ã‚‚ã®ã«ãªã‚Šã¾ã™ã€‚
e$B$J$+$@$G$9!#e(B
At Sun, 18 Mar 2007 10:43:11 +0900,
sheepman wrote in [ruby-dev:30620]:
DL::PtrData e$B%*%V%8%’%/%H$G$Oe(B ruby e$B$,e(B GC e$B$r$9$k;~$K8F$Ve(B
free function e$B$r;XDj$9$k$3$H$,$G$-$^$9!#e(B
e$BJ9$/$+$i$K4m81$=$&$J5!G=$G$9$,!#e(B
e$B$7$+$7!"$3$l$Oe(B segv e$B$7$^$9!#860x$r@53N$KDI$&$3$H$,$G$-$F$$$J$$$N$G$9$,!"e(B
e$B$*$=$i$/e(B GC e$B$N??:GCf$K%V%m%C%/$,8F$P$l$k$3$H$G5/$-$F$$$k$s$@$H;W$$$^$9!#e(B
e$B$H$$$&$o$1$G!"e(BDL::Symbol e$B%*%V%8%’%/%H$Ke(Bcallbacke$B$+$I$&$+$N%U%i%0$r;}$?$;$F!"e(B
callback e$B$Oe(B PtrData e$B$Ne(B free e$B4X?t$H$7$F;XDj$G$-$J$$$h$&$K%Q%C%A$r=q$$$F$_$^$7$?!#e(B
callbacke$B$Oe(Bfinalizere$B$KJQ49$7$FEPO?$9$k!"$H$$$&$N$O$I$&$G$7$g$&$+!#e(B
finalizere$B$Oe(BGCe$B=*N;D>8e$K<B9T$5$l$^$9!#e(B
e$B$3$s$P$s$O!"e(Bsheepman e$B$G$9!#e(B
On Sun, 18 Mar 2007 11:46:59 +0900
Nobuyoshi N. [email protected] wrote:
callbacke$B$Oe(Bfinalizere$B$KJQ49$7$FEPO?$9$k!"$H$$$&$N$O$I$&$G$7$g$&$+!#e(B
finalizere$B$Oe(BGCe$B=*N;D>8e$K<B9T$5$l$^$9!#e(B
e$B9M$($F$_$?$s$G$9$,!"$I$&e(B finalizer
e$B$r;H$($PNI$$$N$+$o$+$j$^$;$s$G$7$?!#e(B
sheepman wrote:
DL::PtrData e$B%*%V%8%’%/%H$G$Oe(B ruby e$B$,e(B GC e$B$r$9$k;~$K8F$Ve(B
free function e$B$r;XDj$9$k$3$H$,$G$-$^$9!#e(B
e$B$G!"$?$H$($Pe(B regex e$B%i%$%V%i%j$@$He(B regfree e$B$7$?$"$H$K!"e(B
free e$B$r8F$S$?$$$N$G!"0J2<$N$h$&$Je(B DL.callback e$B$r;H$C$?%3!<%I$re(B
e$B=q$-$?$/$J$j$^$9!#e(B
e$B$J$k$[$I!#e(B
e$B$H$$$&$o$1$G!"e(BDL::Symbol e$B%*%V%8%’%/%H$Ke(Bcallbacke$B$+$I$&$+$N%U%i%0$r;}$?$;$F!“e(B
callback e$B$Oe(B PtrData e$B$Ne(B free e$B4X?t$H$7$F;XDj$G$-$J$$$h$&$K%Q%C%A$r=q$$$F$_$^$7$?!#e(B
segv e$B$7$F$$$k860x$,0c$C$F$$$k$J$i!”$3$N%Q%C%A$OL5MQ$N$b$N$K$J$j$^$9!#e(B
e$B9*$/2r7h$G$-$k$^$G$O!"$R$H$^$:%Q%C%A$r<u$1F~$l$F;XDj$G$-$J$$$h$&$K$7$F$*$3$&$H;W$$$^$9!#e(B