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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/golang-nuts/d00058ec-cb9b-495f-807d-54397be94df2n%40googlegroups.com.