<div dir="auto"><div><div class="gmail_quote"><div dir="ltr">Dennis <<a href="mailto:dec12@avidsoft.com.hk" target="_blank" rel="noreferrer">dec12@avidsoft.com.hk</a>> schrieb am Fr., 24. Aug. 2018, 13:11:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The run results:<br>
Object call Time Taken Seconds: 2.1899964194744825E-001<br>
Interface call Time Taken Seconds: 2.7999999001622200E-001<br>
<br>
so, the time difference is about 27%<br>
<br>
<br>
My question is, where is this extra time spent?<br>
<br>
I am assuming an interface variable has a table with entries storing ( <br>
pointer to the object instance AND an offset of method address in the <br>
Virtual Method Table of that object.)<br>
<br>
Am I correct?<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Using an interface is always calling virtual methods. </div><div dir="auto"><br></div><div dir="auto">It's however a table that contains pointers to compiler generated wrappers that adjust the Self Pointer and call the correct method. </div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
What is the memory occupied by the interface variable?<br>
I know the sizeof(i) = 8 (in 64 bit windows), but what is the size of <br>
the instance?<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">The instance is essentially only the VMT, cause for interfaces implemented by FPC classes the interface variable points to a shifted Self pointer that is "fixed" c the wrappers mentioned above. </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven</div><div dir="auto"><div class="gmail_quote"></div></div></div>