Florian Klaempfl escreveu:
Luiz Americo Pereira Camara schrieb:
Florian Klaempfl escreveu:
Luiz Americo Pereira Camara schrieb:
Florian Klaempfl escreveu:
Luiz Americo Pereira Camara schrieb:
Florian Klaempfl escreveu:
Luiz Americo Pereira Camara schrieb:
My point was that this could be a missing optimization
opportunity: pass by reference a 8 bytes parameter when the
pointer size is 4.
Don't forget that this makes an extra memory access.
I will do my question in a simpler way:
Using constant parameters (add const keyword in front of an
argument) is beneficial for record types with size > pointer size
and for string types but not for integer and pointer types.
No, this is not necessarily true. The extra indirect can be also
slower.
For string types it will avoid incrementing and decrementing the
ref count. See the test i did at
http://lazarusroad.blogspot.com/2008/11/effect-of-using-constant-parameter-for.html
and the code diff at http://www.geocities.com/camara_luiz/coddiff.htm
For record (TPoint) the constant version generate less code. See
the attached diff.
Please check also the code in the callee ;)
I already checked: is equal.
No, just look at the actual assignment:
i:=v;
By const/reference it generates 5 instructions, by value only 4. The
rest is entry code. If you've only one access, passing by reference
might have an advantage, the more accesses you have, the better direct
passing is. Just benchmark a loop ;)
Thanks for pointing that. Seems that the only clear advantage of const
is in string types. For records it depends how is accessed/used inside
the function.
Luiz
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel