[MUD-Dev] [TECH] String Classes, Memory Management, and Fragmentation

Sean Kelly sean at ffwd.cx
Tue Jul 10 08:54:49 New Zealand Standard Time 2001

From: "Derek Licciardi" <derek at elysianonline.com>

> I was wondering if someone from the MMORPG dev teams, or from the
> large scale MUD dev teams would answer a question for me.  How do
> you guys handle Strings in game and the associated heap
> fragmentation of dynamically allocated string classes?  Is anyone
> using third part Heap managers or replacement libraries?  Are you
> using fixed string classes?  Are you sharing strings for common
> objects/mobs?

This obviously depends a lot on the language you're using.  Were I
using C++, I would use std::string, possibly with a custom allocator
(though I don't see this as being neccessary).  Heap managers are
platform-dependent, but they're an obvious option.  It's rare that I
find it neccessary to explicitly allocate memory on the heap, but if
you're worried about heap fragmentation, you can override operator
new and delete to cache objects for reuse.  I played with one design
that stored all message objects in a central repository and clients
just borrowed them when needed.

One other advantage of std::string is the small string optimization.
Most implementations include a small static array for storing short
strings to avoid the performance hit associated with malloc/new.
This also obviously means that there is no heap fragmentation.
Finally, you could set a max message size and store everything in
fixed-size arrays.

I would think that sharing strings has more to do with reducing
memory overhead than heap fragmentation.  Older implementations of
std::string are resource-counted, but this design wreaks havoc with
multithreading, so everyone is moving away from it.  Get a good,
recent implementation of the STL (SGI, STLPort, Dinkumware 3.08) and
get comfortable with it.


MUD-Dev mailing list
MUD-Dev at kanga.nu

More information about the MUD-Dev mailing list