It may not be the most elegant solution, but you could possibly check for 
the high bit set on any pointer during GC. If the high bit is set, you know 
for sure that that pointer is not actually pointing to anything, but rather 
is data. Technically speaking, the top 16 bits of any pointer in x86-64 is 
completely ignored
by the cpu, So To make this work, you would have to change the order of the 
stringStruct to be { len int, str unsafe.Pointer}, but the principle is the 
same, the last 8 bits could be used the exact same way.
On Tuesday, January 31, 2017 at 9:15:54 PM UTC-8, Ian Lance wrote:
>
> On Tue, Jan 31, 2017 at 9:10 PM, Eliot Hedeman 
> <eliot.d...@gmail.com <javascript:>> wrote: 
> > I was writing up a proposal about adding the small string 
> > optimization(putting strings on the heap if they will fit within the 
> > sringStruct)to the go runtime, and I realized there might be good reason 
> why 
> > this has not been done yet. Are there any glaring reasons you can think 
> of? 
> > Here is the really rough draft of the proposal. Thanks for the feedback! 
>
> The problem is that the concurrent garbage collector needs to be able 
> to determine reliably and safely whether a word in memory, including 
> on the stack, contains a pointer or not.  It's not OK to have a word 
> in memory that might or might contain a pointer.  It's a good thing 
> that Go doesn't have unions in the language, because they would be 
> very difficult to implement in the garbage collector. 
>
> 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.

Reply via email to