[fpc-pascal] Move with pointers to memory

Sven Barth pascaldragon at googlemail.com
Wed Nov 13 11:38:31 CET 2013


Am 13.11.2013 11:32, schrieb Frederic Da Vitoria:
> 2013/11/13 Sven Barth <pascaldragon at googlemail.com 
> <mailto:pascaldragon at googlemail.com>>
>
>     Am 13.11.2013 11:07, schrieb Frederic Da Vitoria:
>>     2013/11/13 Rainer Stratmann <rainerstratmann at t-online.de
>>     <mailto:rainerstratmann at t-online.de>>
>>
>>          On Wednesday 13 November 2013 10:52:23 you wrote:
>>         > 2013/11/13 Rainer Stratmann <rainerstratmann at t-online.de
>>         <mailto:rainerstratmann at t-online.de>>
>>         > > Is there a description of the behaviour of const and var
>>         in this case?
>>         > > Why is it not both const or both var?
>>         >
>>         > "source" is where the data "comes from", so the procedure
>>         won't modify it
>>         > (if there is no memory overlap between source and dest), so
>>         it is declared
>>         > as "const"
>>         > "dest" is where the data is copied to, so the procedure
>>         will necessarily
>>         > modify it (if "count" is <> 0), and the procedure should
>>         modify so it is
>>         > declared as "var". Actually, IMO it could be declared as
>>         "out", this would
>>         > avoid a meaningless warning.
>>
>>         But why does it work without specifying the vars more exactly
>>         like in other
>>         cases?
>>
>>
>>     You mean, how can it work without using typed variables? In
>>     Pascal, you don't have to give the type of a parameter, although
>>     99.99% of the times you should do it. If you don't do it, you
>>     could as well use assembly :-) Actually, that's probably how Move
>>     is written: in assembly language. Of course, since the types were
>>     not given in the parameter declaration of Move, the compiler
>>     can't know the size of the data, and you have to give the
>>     compiler some indication. That's what "count" is for. Move
>>     considers the memory as 2 big arrays of bytes, one starting at
>>     "source", and the second at "dest".
>     The fallback implementation (for new architectures) is written in
>     Pascal. See $fpcdir\rtl\inc\generic.inc.
>
>
> Of course it is, I should have guessed it, Lazarus/FPC is 
> multi-platform. I keep thinking as if I was using a Windows-only 
> development tool.
Most architectures do have a (often much shorter) implementation in 
assembly language though which is located in $fpcdir\rtl\$cpu\$cpu.inc.

Regards,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20131113/9b2778da/attachment.html>


More information about the fpc-pascal mailing list