c) ist unnötig, wenn die Defaults eh 0.0 sind - das erledigt Default() schon - nur wenn sie von dem abweichen muss man da was setzen.
Dein gezeigner
asm ist ohne Optimierung - mit sieht das so aus:
Code:
Result := Default(TBlaResult);
0041BDB4 8BFB mov edi,ebx
0041BDB6 33C0 xor eax,eax
0041BDB8 AB stosd
0041BDB9 AB stosd
0041BDBA AB stosd
0041BDBB AB stosd
Result.one := 0.0;
0041BDBC 33C0 xor eax,eax
0041BDBE 8903 mov [ebx],eax
0041BDC0 894304 mov [ebx+$04],eax
Result.two := 0.0;
0041BDC3 33C0 xor eax,eax
0041BDC5 894308 mov [ebx+$08],eax
0041BDC8 89430C mov [ebx+$0c],eax
Project456.dpr.30: end;
0041BDCB 5F pop edi
0041BDCC 5B pop ebx
0041BDCD C3 ret
Man könnt sich jetzt noch darüber beschweren, dass er mehrfach eax leert, aber so ist er halt unser lieber Delphi Compiler - von Peephole Optimizations kein Plan
Ein gescheiter Compiler würd da übrigens sowas draus machen:
Code:
pxor xmm0, xmm0
movups [eax], xmm0