On Saturday, 14 March 2015 at 18:26:34 UTC, Robert M. Münch wrote:
Hi, I have a question about how the GC handles this case:

export extern(C) char* foo(){
 char[] x = "This is a dynamic D string.".dup;

 return(cast(char*)x);
}

Since x is "pointer to array data & length" if it goes out of scope, it's destroyed and the last reference to the array data is gone. Hence, the GC could kick in and free the array data. Is this correct?

Or will the GC know, that there was a pointer to the array data returned and hence a new reference exists as long until someone tells the GC that the pointer is no longer used?

My situation is, that the returned pointer is used to copy the result to some interpreter internal state. Depending on the answers above, there could be a short time where the memory state is "collectable" before the coyping was finished.

As long as the pointer remains on the stack or in a register, the GC will keep the allocation alive. But if your C code stores the pointer on the C heap or in a global, the GC won't know anything about it and can free it.

Reply via email to