On 2014-04-05 15:08, "Marc Schütz" <schue...@gmx.net>" wrote:

Yes, but it doesn't necessarily contain `s` anymore. Today's compilers
are intelligent enough to see that `s` is never used after the function
call, and therefore don't even allocate a stack slot for it.

Ok, I see.

`foo` could be implemented like this (it's a C function, so `in` boils
down to `const` without `scope`):

char *b;
void foo (const char *a) {
     b = a;
     // do something complex that causes all the registers to be reused
     // => the only reference to the string is now in b, outside of the
GC's view
     // --> GC collects here <--
     printf(b); // the string may have been collected here
}

Of course, if the C function is storing the parameter in a global variable you got problems. You really need to be sure of what the C functions is doing. To be on the safe side there's always GC.addRoot.

--
/Jacob Carlborg

Reply via email to