[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: Question about Lua 5.1.3 and realloc() on life.lua
- From: "Jerome Vuarand" <jerome.vuarand@...>
- Date: Thu, 1 May 2008 16:10:06 -0400
Bogdan Marinescu wrote:
> I'm trying to understand what would be the best memory allocator to
> use in order to run Lua (5.1.3) in an embedded system. As part of
> this task, I wrote a simple memory statistics module that replaces
> Lua's default allocator and logs malloc, realloc and free calls and
> their arguments, and a Python script (I'm still a beginner at Lua :)
> ) to interpret the results. I ran 'life.lua', and the results
> surprised me. Specifically, I can see lots and lots of realloc calls
> with a one byte difference between the old block size and the new
> block size, in both directions (+1 or -1 difference). There are about
> 818000 of them. These are the complete statistics, for whoever is
> curious about them:
>
> One byte reallocs: 818003
> MALLOCS: 1642338
> FREES: 1642338
> RELLOCS: 833088
> Min block size: 12
> Max block size: 4096
>
> INTERVAL MALLOCS FREES REALLOCS
>
=======================================================================
> 12 - 216 394650 394602 985
> 216 - 420 408021 408026 30055
> 420 - 624 408020 408022 408006
> 624 - 828 408000 408041 394040
> 828 - 1032 20007 20007 2
> 1032 - 1236 0 0 0
> 1236 - 1440 0 0 0
> 1440 - 1644 0 0 0
> 1644 - 1848 1 1 0
> 1848 - 2052 1820 1820 0
> 2052 - 2256 0 0 0
> 2256 - 2460 0 0 0
> 2460 - 2664 0 0 0
> 2664 - 2868 0 0 0
> 2868 - 3072 0 0 0
> 3072 - 3276 0 0 0
> 3276 - 3480 0 0 0
> 3480 - 3684 0 0 0
> 3684 - 3888 0 0 0
> 3888 - 4092 0 0 0
> 4092 - 4096 1819 1819 0
>
> Again, I'm a beginner at Lua, so I apologise in advance if this is a
> stupid question, but is this amount of very small delta (1 byte in
> this case) reallocs normal? I suspect this has quite a large impact
> on performance and memory fragmentation (again, I'm trying to run
> this on an embedded system that has no MMU and a limited amount of
> RAM, so memory allocation is an important issue). As part of the
> tests, I implemented a very simple allocator (DOS-like, with variable
> sized blocks chained to each other) on a desktop machine and tried to
> run 'life.lua' with it. After giving it 512M of RAM to use, it was
> still not able to run 'life.lua' (it runs fine with other tests). I
> know this doesn't really prove anything, as a chained allocator like
> this is anything but smart or optimal from a fragmentation
> perspective, but it does give an idea about the effects of
> fragmentation. I ran other tests too ('factorial.lua' and
> 'bisect.lua', for example), but the reallocs there looked much more
> 'natural' to me. 'life.lua' is the only example that exhibits this
> behaviour. Any thoughts on this?
Where did you get that life.lua from ? Can you send us a copy ?
(Also please send only plain text messages to this list)