[fpc-pascal] dynamic array contents and system.move

José Mejuto joshyfun at gmail.com
Tue May 4 23:49:00 CEST 2010


Hello FPC-Pascal,

Tuesday, May 4, 2010, 9:41:27 PM, you wrote:

M> I have never found anything that says, that an array (not a
M> static-array, just an array), always and under any circumstances must
M> ensure that the identifier of the whole array is equal to the first
M> data-element in the array?
M> I don't even think there is a guarantee that all the data elements are
M> found at consecutive addresses in memory. (which is also required in
M> order to use move)

The problem is a bunch of literature that many people encumber but are
wrong in definition. Some definitions are fine, like the wikipedia
one:

"In computer science, an array data structure or simply array is a
data structure consisting of a collection of elements (values or
variables), each identified by one or more integer indices, stored so
that the address of each element can be computed from its index tuple
by a simple mathematical formula."

And of course the "pascal gurus" that shows us that to copy an array
(static) the proper way is
"move(array1,array2,elements*sizeof(element))" when as far as I know
the result of this operation is undefined but luckily works in most
architectures. Much better would be "move
(array1[0],array2[0],elements*sizeof(element))" but even in this case
the result is undefined, but it is a bit more exact as the programmer
is not assuming that the array pointer is the same address as the
first element.

So nobody can copy an array accessing its identifier, but at least
accessing the first element, assuming that data is contiguous.

-- 
Best regards,
 José




More information about the fpc-pascal mailing list