[fpc-pascal] Re: New object created in custom pool
Knuckles
knuckster at gmail.com
Wed Oct 29 06:16:51 CET 2008
JoshyFun пишет:
> The "problem" is that most objects are quite small, two pointers and
> two int64 values (maybe 2 pointers more in a near future), but it must
> be a class instead a record because it could be overriden and
> specialized for other minor tasks (minor in the
> amount of created objects). The big "but" is that the creation of this
> objects will be in blocks of around 100 in average and every each
> block some big objects are created and many times allocation pages
> seens to be only half filled using the calculator and a rude
> aproximation, so I'll try to put all the small objects in a single
> block and see what happends with the memory (and also learn a bit more
> about fpc ;) ).
I suppose you should really take a look at the GoF's flyweight design
pattern. If I understood you right, it's exactly what you want. The
trick is (in short): You create only a few objects which in turn don't
store all information inside, but rather use an outer storage - so
called context. In your case it can be an array of records with those
pointers and Ints. When you intend to use a flyweight, you give it a
pointer to a needed context (buffer cell). So maybe you can even create
only 1 instance of a needed class. The buffer of contexts can be easily
allocated without fragmentation (use array or vector).
More information about the fpc-pascal
mailing list