If !RCLASS_EXT_EMBEDDED (e.g. 32 bit systems) then the rb_classext_t is allocated throug malloc so it must be freed.
The issue can be seen in the following script:
20.timesdo100_000.timesdomod=Module.newClass.newdoincludemodendend# Output the Resident Set Size (memory usage, in KB) of the current Ruby processputs`ps -o rss= -p #{$$}`end
Before this fix, the max RSS is 280MB, while after this change, it's 30MB.
If !RCLASS_EXT_EMBEDDED (e.g. 32 bit systems) then the rb_classext_t is
allocated throug malloc so it must be freed.
The issue can be seen in the following script:
20.times do
100_000.times do
mod = Module.new
Class.new do
include mod
end
end
# Output the Resident Set Size (memory usage, in KB) of the current Ruby process
puts `ps -o rss= -p #{$$}`
end
Before this fix, the max RSS is 280MB, while after this change, it's
30MB.