[fpc-devel] Class field reordering

Florian Klämpfl florian at freepascal.org
Sat Jul 14 20:09:52 CEST 2012


Am 14.07.2012 01:44, schrieb Jonas Maebe:
> 
> Hi,
> 
> 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.

The only drawback I see that people might sort fields for better cache
usage but this is rarely the case imo. So if the optimization can be
turned off, it should be fine.

> 
> 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 files).
> 
> 
> Jonas
> 
> 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
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
> 





More information about the fpc-devel mailing list