StructType.init and StructType() cause a allocation
Benjamin Thaut
code at benjamin-thaut.de
Sat Jun 30 05:06:32 PDT 2012
Am 30.06.2012 13:52, schrieb bearophile:
>> I don't know if that bug fix (in dmd 2.060alpha) has fixed your
>> problem too.
>
> I have compiled this code from your issue 7271 with the latest beta:
>
>
> struct MemoryBlockInfo {
> size_t size;
> long[10] backtrace;
> int backtraceSize;
>
> this(size_t size) {
> this.size = size;
> }
> }
> void main() {
> MemoryBlockInfo info;
> info = MemoryBlockInfo.init; //array allocation here
> }
>
>
> Compiling it with no optimization it gives:
>
>
> _D4temp15MemoryBlockInfo6__ctorMFkZS4temp15MemoryBlockInfo
> enter 4,0
> mov ECX,8[EBP]
> mov [EAX],ECX
> leave
> ret 4
>
> __Dmain comdat
> enter 060h,0
> push ESI
> push EDI
> mov ECX,018h
> xor EAX,EAX
> lea EDI,-060h[EBP]
> rep
> stosd
> mov ESI,offset FLAT:_D4temp15MemoryBlockInfo6__initZ
> lea EDI,-060h[EBP]
> mov CL,018h
> rep
> movsd
> pop EDI
> pop ESI
> leave
> ret
>
>
> With -O -release -inline it becomes:
>
>
> _D4temp15MemoryBlockInfo6__ctorMFkZS4temp15MemoryBlockInfo comdat
> push EAX
> mov ECX,8[ESP]
> mov [EAX],ECX
> pop ECX
> ret 4
>
> __Dmain comdat
> sub ESP,064h
> mov ECX,018h
> xor EAX,EAX
> push EDI
> lea EDI,4[ESP]
> rep
> stosd
> pop EDI
> add ESP,064h
> ret
>
>
> In both cases I don't see a memory allocation.
>
> Bye,
> bearophile
Thank you, Its very nice to know that this got fixed. Someone might want
to close the ticket as duplicate then.
Kind Regards
Benjamin Thaut
More information about the Digitalmars-d
mailing list