github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/go/types/sizes.go (about) 1 // "go test -run=Generate -write=all"によって生成されたコードです。編集しないでください。 2 3 // Copyright 2013 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 // このファイルは、Sizesを実装しています。 8 9 package types 10 11 // Sizesはパッケージunsafeのサイズ決定関数を定義します。 12 type Sizes interface { 13 Alignof(T Type) int64 14 15 Offsetsof(fields []*Var) []int64 16 17 Sizeof(T Type) int64 18 } 19 20 // StdSizesはよく使われるサイズを作成するための便利な型です。 21 // 以下の単純化された仮定を行います: 22 // 23 // - 明示的なサイズの基本型(int16など)のサイズは指定されたサイズです。 24 // - 文字列とインターフェースのサイズは2 * WordSizeです。 25 // - スライスのサイズは3 * WordSizeです。 26 // - n要素の配列のサイズは、配列要素の型のn連続フィールドの配列のサイズに対応します。 27 // - 構造体のサイズは、最後のフィールドのオフセットにそのフィールドのサイズを加えたものです。 28 // すべての要素型と同様に、構造体が配列で使用される場合、そのサイズはまず構造体のアライメントの倍数に揃える必要があります。 29 // - その他のすべての型のサイズはWordSizeです。 30 // - 配列と構造体は仕様の定義に従ってアラインされます。その他のすべての型は最大アラインメントMaxAlignで自然にアラインされます。 31 // 32 // *StdSizesはSizesを実装しています。 33 type StdSizes struct { 34 WordSize int64 35 MaxAlign int64 36 } 37 38 func (s *StdSizes) Alignof(T Type) (result int64) 39 40 func (s *StdSizes) Offsetsof(fields []*Var) []int64 41 42 func (s *StdSizes) Sizeof(T Type) int64 43 44 // SizesForは、コンパイラがアーキテクチャで使用するサイズを返します。 45 // コンパイラ/アーキテクチャの組み合わせが不明な場合、結果はnilです。 46 // 47 // コンパイラ"gc"に対応したアーキテクチャ: 48 // "386", "amd64", "amd64p32", "arm", "arm64", "loong64", "mips", "mipsle", 49 // "mips64", "mips64le", "ppc64", "ppc64le", "riscv64", "s390x", "sparc64", "wasm"。 50 func SizesFor(compiler, arch string) Sizes