[fpc-devel] Aligned dynamic arrays
Sven Barth
pascaldragon at googlemail.com
Thu Mar 28 09:17:21 CET 2019
Ryan Joseph <ryan at thealchemistguild.com> schrieb am Do., 28. März 2019,
03:01:
> Here’s the basic structure:
>
> [header][padding][offset][head]
>
> [head] being the start of the elements (the pointer to the first element
> of the array) and aligned to the requested amount. Keep in mind the head is
> the pointer which is passed around so we need to subtract back from that in
> order to access the header, which contains the array high value and the
> refcount.
>
The order should be
[padding] [header] [data]
with the offset being part of the header. This way you reduce the changes
needed to only those that allocate/free an array.
> Look at the dynarr.inc in the /rtl directory to see what I’m talking
> about. Pretty hard to explain without seeing how Sven did things. :)
>
Most of that isn't my code. I only added Insert, Delete and Concat.
> >
> > The comment:
> > As for extending the array header, maybe introduce a new data type
> "aligned array".
> > So normal arrays do not have that field in there header.
>
> The plan was to make a “SetLengthAligned” or add an extra parameter to
> “SetLength”, i.e, SetLength(arr,100,true). I have no preference, what ever
> the compiler team wants.
>
Extending SetLength is not a good idea as that can take multiple lengths
for multi dimensional arrays.
Also I don't think that a simple "do alignment or not" will be sufficient.
What kind of alignment do you pick? What if the user needs more alignment?
So it would probably be best to add a new SetLengthAligned of which the
second argument is the alignment followed by the lengths.
In dynarr.inc you then add a new setlength variant that takes an additional
alignment parameter while the old one without alignment calls the new one
with alignment 1.
Note: the compiler can call the new one for both variants, but the old one
is required for bootstrapping, so you could surround that with {$if not
defined(ver3_0) and not defined(ver3_2)}.
Regards,
Sven
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190328/48460cac/attachment.html>
More information about the fpc-devel
mailing list