Leaving a pointer to it on the stack

Steven Schveighoffer schveiguy at gmail.com
Thu Aug 13 21:10:57 UTC 2020


On 8/13/20 4:51 PM, Andre Pany wrote:
> On Thursday, 13 August 2020 at 20:11:50 UTC, Steven Schveighoffer wrote:
>> The garbage collector scans all of the stack as if it were an array of 
>> pointers. So if you have a pointer to it anywhere on the stack, it 
>> won't be collected.
>>
>> However, it only scans threads that the runtime knows about.
>>
> 
> If I understand it right, this paragraph doesn't help in my real 
> scenario where sample (Dll) is called from a delphi executable.

So in your real world scenario, a non-D thread/program is calling 
sample, and it controls the location of *i? If so, then no, you can't 
depend on D not collecting that data, because D might not scan that 
location.

> It is another runtime (delphi). But on the other side, as D GC only runs 
> if something new should be allocated on D side, I can safely assume that 
> the Delphi caller can access the heap variables? Of course as long as it 
> doesn't store the references and use it later...

As long as you aren't allocating again later, yes. You can also disable 
collections and only run them when you know it's safe to do so.

-steve


More information about the Digitalmars-d-learn mailing list