Oh, yeah, you're right, that does seem to be the intent.
From what I know, and based on the documentation I linked before[1],
you can, at most, get 32-bit alignment on 32-bit platforms and 64-bit
alignment on 64-bit platforms with Go. At least with this approach.
For in-memory size/alignment purposes, an array type [N]T is equivalent
to just having N discrete attributes of type T on the struct.
Which is to say, an array of 64 bytes does not increase your alignment
above 1 byte, and the best you'll get is an alignment of 8 bytes via
uint64, assuming you're on a 64-bit platform, and only 4 bytes on a
32-bit platform. And [2]uint64 would not fare any better.
Also, I appear to have accidentally veered off-list for this discussion
with Robert Engels, my apologies.
[1] https://go.dev/s/regabi
On 6/11/25 17:00, Robert Engels wrote:
I don’t think so - it a “64 BYTE aligned” to prevent false sharing -
according to the original code.
On Jun 11, 2025, at 8:39 AM, Def Ceb <mikk.mar...@gmail.com> wrote:
To get a n-bit-aligned pointer (where n is 16 or 64) to an arbitrary
value using generics, is it not?
On Wed, Jun 11, 2025, 16:36 Robert Engels <reng...@ix.netcom.com
<mailto:reng...@ix.netcom.com>> wrote:
It depends on what the OP is trying to align… eg is it to prevent
false sharing?
On Jun 11, 2025, at 8:14 AM, Def Ceb <mikk.mar...@gmail.com
<mailto:mikk.mar...@gmail.com>> wrote:
https://go.dev/s/regabi <https://go.dev/s/regabi>
I believe this is true. The arrays of bytes would not enforce
alignment any tighter than that of one byte. Replacing the
aliases of Align16 and Align64 from byte arrays to uint16/uint64
would fix this.
On Wed, Jun 11, 2025, 15:47 Robert Engels <reng...@ix.netcom.com
<mailto:reng...@ix.netcom.com>> wrote:
I don’t think the code works at all - at least not from an
alignment perspective. For instance, assume T is one byte,
and you use align 64, it is aligned on 65 byte boundaries.
(This may not be fully correct need to read spec on structure
member alignment - but the gist should be true)
On Jun 10, 2025, at 10:04 AM, Timur Celik <clk...@gmail.com
<mailto:clk...@gmail.com>> wrote:
Consider the following generic type, which ensures to be
large enough by allocating enough padding A and the to-be-
aligned type T:
type Alignment interface {
Align16 | Align64
}
type Align16 = [16]byte
type Align64 = [64]byte
type Aligned[T any, A Alignment] struct {
pad A
val T
}
func (p *Aligned[T, A]) Value() *T {
size := unsafe.Sizeof(*new(A))
align := size - uintptr(unsafe.Pointer(&p.pad[0]))&(size-1)
return (*T)(unsafe.Pointer(&p.pad[align]))
}
Under the assumption that T has no heap pointers, is this
safe? Or asked in another way, under which circumstances
would this break?
--
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 <mailto:golang-
nuts+unsubscr...@googlegroups.com>.
To view this discussion visit https://groups.google.com/d/
msgid/golang-nuts/d00058ec-
cb9b-495f-807d-54397be94df2n%40googlegroups.com <https://
groups.google.com/d/msgid/golang-nuts/d00058ec-
cb9b-495f-807d-54397be94df2n%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
<mailto:golang-nuts+unsubscr...@googlegroups.com>.
To view this discussion visit https://groups.google.com/d/
msgid/golang-nuts/D368E0E8-
DE85-43D3-813E-60D359578DF8%40ix.netcom.com <https://
groups.google.com/d/msgid/golang-nuts/D368E0E8-
DE85-43D3-813E-60D359578DF8%40ix.netcom.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 visit
https://groups.google.com/d/msgid/golang-nuts/91ba1cc7-4124-4d11-8c79-bb49f08e6150%40gmail.com.