On Saturday, February 4, 2017 at 5:40:25 PM UTC+8, T L wrote:
>
>
>
> On Friday, February 3, 2017 at 10:44:26 PM UTC+8, Ian Lance Taylor wrote:
>>
>> On Fri, Feb 3, 2017 at 5:38 AM, T L <tapi...@gmail.com> wrote: 
>> > Why does WaitGroup.state method check 64-bit alignment at run time? 
>> > Why not make the state field as the first word of WaitGroup struct? 
>> > 
>> > // https://golang.org/src/sync/waitgroup.go?s=1857:1892#L20 
>> > 
>> > type WaitGroup struct { 
>> > 
>> > noCopy noCopy 
>> > 
>> > // 64-bit value: high 32 bits are counter, low 32 bits are waiter 
>> count. 
>> > 
>> > // 64-bit atomic operations require 64-bit alignment, but 32-bit 
>> > 
>> > // compilers do not ensure it. So we allocate 12 bytes and then use 
>> > 
>> > // the aligned 8 bytes in them as state. 
>>
>> Doesn't this comment explain the problem? 
>>
>> Ian 
>>
>
> Part of. Ok I get it now.
>
> BTW, I have another question, can an allocated local int64 value be relied 
> upon to be 64-bit aligned?
>
>
By search the usages of 64bit functions in atomic package in go source, I 
think the answer should be yes.
And the go source also imply any 8-byte sized fields, and the fields 
followed 8-byte sized fields, in any struct are also relied upon to be 
64-bit aligned.
 

>  
>

-- 
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