In the example you cite, in a properly written compiler that memory would no 
longer be referenced (unless it was needed later) - no need to manually clear 
all pointers - just the root references. 

I think you need more understanding of how to properly manage memory in a GC 
environment. 

> On Apr 16, 2019, at 11:53 PM, jlforr...@berkeley.edu wrote:
> 
> In a compiler, say during the lexing and parsing phases, memory might be 
> allocated
> that won't be needed after those phases are complete. The memory is still 
> referenced,
> so the GC won't free it, but conceptually it actually could be freed. In 
> other words,
> the fact that memory is referenced isn't the final word on whether it could 
> be freed.
> 
> You're saying to modify all the pointers that point to this memory. I'm 
> guessing
> that this could be a lot of work, Plus, let's say this memory is organized as
> a linked list. Would it be sufficient to just modify the pointer that points 
> to the
> head of the list, or would I have to go through the list from tail to head, 
> modifying
> the pointers in each list element?
> 
> And to answer Robert Engels question - no, I'm not concerned with the 
> GC's performance because the memory I'm thinking about won't be seen
> by the GC since it's still referenced. And yes, I'm wondering whether there's
> a way to create a region-like entity so that all the memory that was allocated
> in the region could be freed in one swell foop.
> 
> Thanks,
> Jon
> 
> 
> 
> 
>> On Tuesday, April 16, 2019 at 9:31:46 PM UTC-7, Ian Lance Taylor wrote:
>> 
>> 
>> I'm not clear on what the problem is.  If the memory is still 
>> referenced, then it can't be freed.  If the memory can be freed, then 
>> there shouldn't be any references to it.  So, at the point where you 
>> would explicitly free memory, just clear the pointers that point to 
>> it.  Then the GC will free the memory. 
>> 
>> Ian 
> 
>> On Tuesday, April 16, 2019 at 9:31:46 PM UTC-7, Ian Lance Taylor wrote:
>> On Tue, Apr 16, 2019 at 8:46 PM <jlfo...@berkeley.edu> wrote: 
>> > 
>> > Go's garbage collector is very nice, and solves many problems that come up 
>> > in C programs. 
>> > 
>> > However, one thing I've been wondering about is explicitly freeing memory. 
>> > I know it can't be done 
>> > now, and that the GC takes care of everything. 
>> > 
>> > But I was thinking about multi-pass programs like compilers, that do a 
>> > bunch of work in one pass. 
>> > Once the pass is complete then most of the memory used by the pass could 
>> > be freed. But that 
>> > will never happen because the memory appears to the GC as still in use. 
>> > There are probably 
>> > other examples of such program structure. 
>> > 
>> > What's the current thinking on this problem? 
>> 
>> I'm not clear on what the problem is.  If the memory is still 
>> referenced, then it can't be freed.  If the memory can be freed, then 
>> there shouldn't be any references to it.  So, at the point where you 
>> would explicitly free memory, just clear the pointers that point to 
>> it.  Then the GC will free the memory. 
>> 
>> Ian 
> 
>> On Tuesday, April 16, 2019 at 9:31:46 PM UTC-7, Ian Lance Taylor wrote:
>> On Tue, Apr 16, 2019 at 8:46 PM <jlfo...@berkeley.edu> wrote: 
>> > 
>> > Go's garbage collector is very nice, and solves many problems that come up 
>> > in C programs. 
>> > 
>> > However, one thing I've been wondering about is explicitly freeing memory. 
>> > I know it can't be done 
>> > now, and that the GC takes care of everything. 
>> > 
>> > But I was thinking about multi-pass programs like compilers, that do a 
>> > bunch of work in one pass. 
>> > Once the pass is complete then most of the memory used by the pass could 
>> > be freed. But that 
>> > will never happen because the memory appears to the GC as still in use. 
>> > There are probably 
>> > other examples of such program structure. 
>> > 
>> > What's the current thinking on this problem? 
>> 
>> I'm not clear on what the problem is.  If the memory is still 
>> referenced, then it can't be freed.  If the memory can be freed, then 
>> there shouldn't be any references to it.  So, at the point where you 
>> would explicitly free memory, just clear the pointers that point to 
>> it.  Then the GC will free the memory. 
>> 
>> Ian 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to