On Wednesday, September 6, 2017 at 6:40:46 AM UTC-4, Jakob Borg wrote:
>
> On 6 Sep 2017, at 10:28, T L <[email protected] <javascript:>> wrote:
> > It is just weird that the evaluation timing of *p is different to other
> expressions, such as, *p+0, *p*1, func()int{return *p}m etc.
>
> The value depends on a data race so it's entirely undefined in all cases.
> That the actual outcome then depends on trivial differences that may affect
> CPU loads/stores, instruction ordering, register usage, etc isn't
> surprising.
>
> //jb
Just check the Go runtime code, the signature of the channel send function
is
func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr)
bool {
where ep is a pointer to the sent value.
Apparently, if the sent value is expression of a pure pointer dereference,
the pointer will be passed as the ep argument,
For other cases, the sent expression will get evaluated firstly and store
the result in a temp value, then pass the address of temp value as the ep
argument.
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.