StructType.init and StructType() cause a allocation
bearophile
bearophileHUGS at lycos.com
Sat Jun 30 04:52:15 PDT 2012
> 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
More information about the Digitalmars-d
mailing list