Leak-detection of references to scoped class instances
Per Nordlöw
per.nordlow at gmail.com
Thu Nov 28 21:49:09 UTC 2019
On Monday, 25 November 2019 at 13:09:44 UTC, mipri wrote:
> 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
> +/
> gdc assembly.
What about adding a new optimization pass to the compiler that
infers `scope` of each class instance `x` if it (and all it's
aliasings) are
- only passed to scope parameters of functions and
- doesn't escape into a global variable or via a return value
? I recall such as mechanism already exists for GC-allocated
dynamic arrays which, in release builds of ldc at least, are
replaced with stack-allocated arrays (if they are small enough).
Also, what happens if `C` doesn't fit on the stack? In that case
the compiler should allocate `C` using a deterministic allocator
via `malloc` or `mmap` and `free` or `munmap` the instance at the
end of `x`'s lifetime.
More information about the Digitalmars-d-learn
mailing list