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
