V zásadě stejně jako X: PRecord, ale optimalizátor se může rozhodnout využít té vlastnosti "const" v tom smyslu, že se spolehne na to, že se ten ukazatel nezmění. Nenapadá mě spatra žádný případ, kdy by se ti to mohlo povést změnit, takže to snad nebude problém.
A nebo je to stejne jako
var X:TRecord s tim, ze ty pointery vyzaduji zbytecne operator dereference...
Podle me se ve vsech pripadech predava effektivni adresa recordu tj. instrukce
lea record, ktera v pripade:
-
X:TRecord si v prologu procedury udela lokalni kopii jako automatickou promennou na stacku a zmeny se po opusteni scope ztrati
- v pripade
const:TRecord prekladac rve, kdyz se objevi na leve strane vyrazu
-
var a
out je totez jako predavani pointeru
-
const X:PRecord nedovoli prepsat hodnotu pointeru, ale jak pise pepak, je to stejne hodnota na stacku, kterou kdyz prepises, tak se po opusteni scope ztrati
neco jineho je pointer na pointer, ktery umoznuje realokovat vlastni record, ale jak psal pepak, u DLL je treba dat pozor na memory managery.
a jeste neco jineho je cirkus, ktery se objevi v pripade, ze record obsahuje managed typy.