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