[Fluxus] string leak!
gabor papp
gabor.lists at mndl.hu
Fri Jan 14 03:08:41 PST 2011
while checking out the path/string issue that kassen brought up i found
our string handling a bit strange. the memory usage of the following
script increases about 30 megabytes in 2 minutes on my computer. i
generate a long string which i use in (load-texture) to force the scheme
string to c conversion.
(clear)
(define (rnd-str n)
(build-string n (lambda (x) (integer->char (+ 97 (random 26))))))
(every-frame
(begin
(load-texture (rnd-str 16384))
(collect-garbage)))
StringFromScheme looks like this:
string SchemeHelper::StringFromScheme(Scheme_Object *ob)
{
char *ret = NULL;
MZ_GC_DECL_REG(2);
MZ_GC_VAR_IN_REG(0, ob);
MZ_GC_VAR_IN_REG(1, ret);
MZ_GC_REG();
ret = scheme_utf8_encode_to_buffer(SCHEME_CHAR_STR_VAL(ob),
SCHEME_CHAR_STRLEN_VAL(ob), NULL, 0);
MZ_GC_UNREG();
return string(ret);
}
first i thought it was strange to register a char* buffer with the
garbage collector, but after reading the docs it may seem fine. what do
you think? can you reproduce the leaking? or am i overlooking something?
this would also explain the (pdata-map) leak, since it uses strings to
pass the pdata type in pdata-set!.
best,
gabor
More information about the Fluxus
mailing list