There's a difference only on platforms that wouldn't normally 8-byte align an int64. Those are the 32-bit platforms, e.g. linux/386. On those platforms your program prints 4 8.
On Thursday, September 1, 2022 at 5:15:29 AM UTC-7 axel.wa...@googlemail.com wrote: > I'm not sure under what situations you get misaligned values. But note > that atomic.Int64 has other benefits besides alignment guarantees. Most > importantly, it prevents you from accidentally mixing atomic and non-atomic > accesses to the same address - every access of an atomic.Int64 is always > atomic. > > On Thu, Sep 1, 2022, 13:29 Benz <wei....@zentertain.net> wrote: > >> Since go `1.19`, the [`atomic.Int64`]( >> https://github.com/golang/go/blob/go1.19/src/sync/atomic/type.go#L82) >> was added >> >> ```go >> type Int64 struct { >> _ noCopy >> _ align64 >> v int64 >> } >> ``` >> >> There is one additional [`align64`]( >> https://github.com/golang/go/blob/go1.19/src/sync/atomic/type.go#L191) >> in `atomic.Int64` >> >> ```go >> // align64 may be added to structs that must be 64-bit aligned. >> // This struct is recognized by a special case in the compiler >> // and will not work if copied to any other package. >> type align64 struct{} >> ``` >> >> With the test codes under go 1.19 >> >> ```go >> var i64 int64 >> var a64 atomic.Int64 >> fmt.Println(unsafe.Alignof(i64)) >> fmt.Println(unsafe.Alignof(a64)) >> ``` >> >> The result is >> >> ``` >> 8 >> 8 >> ``` >> >> The test environment is MacOS with CPU info >> >> ``` >> hw.ncpu: 12 >> hw.activecpu: 12 >> hw.perflevel0.cpusperl2: 2 >> hw.perflevel0.cpusperl3: 12 >> hw.perflevel0.logicalcpu: 12 >> hw.perflevel0.logicalcpu_max: 12 >> hw.perflevel0.physicalcpu: 6 >> hw.perflevel0.physicalcpu_max: 6 >> hw.cpu64bit_capable: 1 >> ``` >> >> It seems both `int64` and `atomic.Int64` have the same align size `8`. >> What does `align64 may be added to structs that must be 64-bit aligned` >> means? What situations can `atomic.Int64` be used? >> >> -- >> 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...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/c800d445-deb7-4683-b353-e1bc17d457abn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/c800d445-deb7-4683-b353-e1bc17d457abn%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/fc363d33-72f7-4f3e-929e-14e53adfc8a8n%40googlegroups.com.