[fpc-devel] Class field reordering

Skybuck Flying skybuck2000 at hotmail.com
Sat Jul 14 14:16:03 CEST 2012

I don't think this is a good idea.

For example while debugging and looking at the memory in raw this would lead 
to confusion.

It's already bad that Delphi adds invisible fields to classes so they cannot 
be simply dumped to disk... (virtual method table pointers ?) this would 
make it even worse.


-----Original Message----- 
From: Jonas Maebe
Sent: Saturday, July 14, 2012 1:44
To: fpc-devel at lists.freepascal.org
Subject: [fpc-devel] Class field reordering


I've implemented an optimization that reorders the instance fields of
Delphi-style classes (and only of Delphi-style classes) to minimise
memory gaps caused by alignment differences and odd sizes. The effect
is the same as when you would change the order of the fields in the
source code to achieve this effect.

In general, I think this should be safe since unlike records and
TP-style objects, a Delphi class is normally never blockwritten to
disk or so. There is a switch to disable this transformation, but I'm
wondering whether anyone sees a problem with enabling it by default
when -O2 or higher is used.

It works fine with at least the compiler and Lazarus without any ill
effects, saving a small amount of memory for both (about 2.5MB on 87MB
for the Darwin/x86-64 compiler compiling itslf, and 2.5MB on 62.7MB
for a Carbon/i386 Lazarus right after startup and loading some source


PS: a similar reordering could be performed for local variables,
although the implementation would be quite different. Additionally,
different kinds of reordering, e.g. targeting cache improvements by
putting fields/local variables often used together next to each other,
could also be implemented in the future.
fpc-devel maillist  -  fpc-devel at lists.freepascal.org

More information about the fpc-devel mailing list