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