ホームページ >バックエンド開発 >Golang >Go 構造体のサイズを計算するにはどうすればよいですか?

Go 構造体のサイズを計算するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-22 02:26:12567ブラウズ

How to Calculate the Size of a Go Struct?

Go で構造体のサイズを決定する方法

Go の unsafe パッケージには、値のサイズをバイト単位で返す Sizeof メソッドが用意されています。 。たとえば、以下で定義されている Coord3d 構造体のサイズを確認するには、次のコードを使用できます:

import "unsafe"

type Coord3d struct {
    X, Y, Z int64
}

func main() {
    fmt.Println(unsafe.Sizeof(Coord3d{}))
}

ただし、構造体のサイズには、その構造体が参照するメモリは含まれないことに注意することが重要です。フィールド。たとえば、構造体にスライスが含まれている場合、Sizeof メソッドは、スライスによって参照されるメモリのサイズではなく、スライス記述子のサイズを返します。

構造体のサイズを手動で計算する

Sizeof メソッドの使用に加えて、次のようにして構造体のサイズを手動で計算することもできます。 rules:

    構造体のサイズは、そのフィールドの型とその順序によって異なります。同じフィールドを持つ 2 つの構造体は、パディング要件が異なるため、サイズが異なる場合があります。
  • フィールドの位置合わせは、その型によって決まります。たとえば、int64 のアライメントは 8 バイトですが、bool のアライメントは 1 バイトです。
  • パディングとは、フィールドを必要なアライメントに揃えるためにフィールドの末尾に追加されるスペースです。これにより、構造体がその最大のフィールドに合わせて配置されることが保証されます。
これらのルールに基づいて、フィールドのサイズを合計し、必要なパディングを追加することで、構造体のサイズを計算できます。たとえば、Coord3d 構造体には 3 つの int64 フィールドがあり、それぞれが 8 バイトのアライメントを持っています。したがって、Coord3d 構造体のサイズは 24 バイトです。

gostructsize.appspot.com. などのサービスを使用して計算を検証できます。

以上がGo 構造体のサイズを計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。