Leak-detection of references to scoped class instances
mipri
mipri at minimaltype.com
Mon Nov 25 13:09:44 UTC 2019
On Monday, 25 November 2019 at 12:08:54 UTC, Per Nordlöw wrote:
> On Monday, 25 November 2019 at 08:22:02 UTC, Jacob Carlborg
> wrote:
>> On Sunday, 24 November 2019 at 21:49:19 UTC, Per Nordlöw wrote:
>>> I guess we need a builtin language qualifier for scoped
>>> classes for that to work, right?
>>
>> We have that:
>>
>> scope a = new Object;
>>
>> —
>> /Jacob Carlborg
>
> Ahh, nice.
>
> Does/Will DMD/GDC/LDC (in release builds) make the allocation
> of `Object` happen on the stack?
class C {
int x;
this(int n) { x = n; }
}
int heap() {
auto x = new C(2); // vgc: `new` causes a GC allocation
return x.x;
}
/+
int example.heap():
sub rsp, 8
mov edi, OFFSET FLAT:example.C.__Class
call _d_newclass
mov DWORD PTR [rax+16], 2
mov eax, 2
add rsp, 8
ret
+/
int stack() {
scope x = new C(2); // (no vgc output)
return x.x;
}
/+
int example.stack():
sub rsp, 40
mov rdi, rsp
mov QWORD PTR [rsp], OFFSET FLAT:example.C.__vtbl
mov QWORD PTR [rsp+8], 0
mov DWORD PTR [rsp+16], 2
call _d_callfinalizer
mov eax, 2
add rsp, 40
ret
+/
gdc assembly. ldc eliminates the object entirely.
More information about the Digitalmars-d-learn
mailing list