[Interest] memory fragmentation?

Tony Rietwyk tony at rightsoft.com.au
Tue Aug 21 03:52:25 CEST 2012


Hi Everybody, 

 

I come from a Delphi background.  A while ago the FastMM memory allocator
was adopted by the compiler team because it gave very good results for small
allocations.  It's not quite SLAB - it only looks at the size, not the type
of object, since all Delphi objects are initialised to zeroes.  

 

I recently needed to optimise XML handling in a Qt application server, and
assumed C++ would have something similar.  I was surprised to find that a VS
C++ version was not available, and that changing the allocator requires
nasty run-time patching of linker addresses (?).  

 

In the end I chose Qt 4.8.1  QXmlStreamWriter(QString *).   The QByteArray
version seemed the logical choice - but since the API only uses QString,
each call resulted in temporaries being allocated and disposed.  It seems
QString is crying out for an appendLatin1(const char *, int len) that
re-allocates the unicode array if necessary, and then does the latin1
conversion without creating a temporary.   Doing a single toUtf8 at the end
is also better than calling it a million times.  

 

Another big gain comes from not using literal strings for the element and
attribute tags in loops - create static QStrings, so the latin1 conversion
only happens once.  

 

To Jason:   Pre-creating all of the gui's seems extreme?  Doesn't it waste a
lot of memory if only a small number of dialogs are open at any time?  Also,
unless the dialogs are all static labels, won't populating the controls when
the dialog opens cause allocations?  

 

Regards, 

 

Tony

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20120821/a10ae93e/attachment.html>


More information about the Interest mailing list