> On Mar 27, 2019, at 9:13 PM, Martin Frb <laza...@mfriebe.de> wrote:
> 
> 2 Ideas, well 1 Idea, 1comment...
> 
> The Idea:
> Would it not be easier to:
> - allocate mem, with extra space for align, unless memmanager can handle 
> align.
> - return the alligned pointer for the array, so all array ops will work 
> exactly as they currently do
> - prefix/extend the array header by a field "OffsetToMemAlloc" (that is the 
> reverse, of what I understand your padding would do, but still can be a 
> positive number, the code knows to subtract it where needed)
> 
> This field would allow to correctly get the memory for re-alloc/free 
> operations.

I think we’re basically talking about the same thing but it’s hard to know 
without seeing code. The biggest challenge is that in order to get the array 
header you need to subtract from the “head" (the start of the elements). Right 
now it’s easy because you just subtract the size of the header but if the head 
is now aligned and 100’s of bytes away from the start of the header then you 
need to subtract that amount also. In fact technically speaking the offset 
field is adjacent to the start of elements and could be many bytes away from 
the actual header.

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.

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. :)

> 
> 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.

Regards,
        Ryan Joseph

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to