On Mon, September 15, 2014 07:55, Sven Barth wrote: > On 14.09.2014 18:05, Philippe wrote: >> someone wrote about a better performance using "with". is that true? >> even with a simple pointer as in: . . > This is the relevant code generated for TestWith: > > === asm begin === > > # [28] with p^ do begin > movl -4(%ebp),%ebx > # [29] Prop1 := 42; > movl %ebx,%eax > movw $42,%dx > call P$TWITHTEST_TTEST_$__SETPROP1$SMALLINT > # [30] Prop2 := 21; > movl %ebx,%eax > movw $21,%dx > call P$TWITHTEST_TTEST_$__SETPROP2$SMALLINT > > === asm end === > > and this for TestWithout: > > === asm begin === > > # [42] p^.Prop1 := 42; > movl -4(%ebp),%eax > movw $42,%dx > call P$TWITHTEST_TTEST_$__SETPROP1$SMALLINT > # [43] p^.Prop2 := 21; > movl -4(%ebp),%eax > movw $21,%dx > call P$TWITHTEST_TTEST_$__SETPROP2$SMALLINT > > === asm end === > > As you can see the expression p^ is only evaluated once in the TestWith > case while it's evaluated twice in the TestWithout one. So it's only > minimally faster in this example (one less memory access), but if you > use enough members of TTest it a more or less tight loop it might even > be noticeable.
Have you tried to enable optimizations? Diff of the two code fragments generated with 2.6.4 and -O3: --- t_with_o3.s Mon Sep 15 08:59:07 2014 +++ t_without_o3.s Mon Sep 15 08:59:32 2014 @@ -1,18 +1,14 @@ -# [26] New(p); +# [40] New(p); movl $0,%eax call fpc_getmem movl %eax,%ebx -# [28] with p^ do begin - movl %ebx,%esi -# [29] Prop1 := 42; - movl %esi,%eax +# [42] p^.Prop1 := 42; movw $42,%dx call P$TWITHTEST_TTEST_$__SETPROP1$SMALLINT - movl %esi,%eax -# [t.pas] -# [30] Prop2 := 21; +# [43] p^.Prop2 := 21; + movl %ebx,%eax movw $21,%dx call P$TWITHTEST_TTEST_$__SETPROP2$SMALLINT -# [33] Dispose(p); +# [45] Dispose(p); movl %ebx,%eax call fpc_freemem Note that there are actually more instructions generated for version using 'with' in this case (obviously depending on the context). In other words, the remark about micro-optimizations (which may not necessarily lead to expected results) applies here... Tomas _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal