Leaving a pointer to it on the stack

Andre Pany andre at s-e-a-p.de
Thu Aug 13 20:51:10 UTC 2020


On Thursday, 13 August 2020 at 20:11:50 UTC, Steven Schveighoffer 
wrote:
> On 8/13/20 4:04 PM, Andre Pany wrote:
>> Hi,
>> 
>> in the specification 
>> https://dlang.org/spec/interfaceToC.html#storage_allocation 
>> there is this paragraph:
>> "Leaving a pointer to it on the stack (as a parameter or 
>> automatic variable), as the garbage collector will scan the 
>> stack."
>> 
>> I have some trouble to understand what does this mean. Given 
>> this example:
>> 
>> ```
>> import std;
>> 
>> void main()
>> {
>>      int* i;
>>      sample(&i);
>>      writeln(*i);
>> }
>> 
>> extern(C) export void sample(int** i)
>> {
>>      *i = new int();
>>      **i = 42;
>> }
>> ```
>> 
>> Int variable is created on the heap. How do I leave a pointer 
>> on the stack?
>> (In the real coding, sample function will be called from 
>> Delphi)
>> 
>
> 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.
>
> -Steve

If I understand it right, this paragraph doesn't help in my real 
scenario where sample (Dll) is called from a delphi executable.

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...

Kind regards
Andre


More information about the Digitalmars-d-learn mailing list