On 2014-04-05 15:08, "Marc Schütz" <[email protected]>" 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