Сколько в памяти занимают реализации int32 и int64?go-26

В Go размер целочисленных типов в памяти строго определен спецификацией языка и не зависит от платформы (архитектуры процессора или ОС).

Размеры базовых типов

var (
    a int32 // Всегда занимает 4 байта (32 бита)
    b int64 // Всегда занимает 8 байт (64 бита)
)

Подробное объяснение:

  1. int32:

    • Занимает ровно 4 байта (32 бита)
    • Диапазон значений: от -2,147,483,648 до 2,147,483,647
    • Аналогичен int32_t в C/C++
  2. int64:

    • Занимает ровно 8 байт (64 бита)
    • Диапазон значений: от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
    • Аналогичен int64_t в C/C++

Особенности реализации

  • Размеры фиксированы согласно спецификации Go
  • В отличие от типа int, который может быть 32 или 64 бит в зависимости от платформы, int32 и int64 всегда имеют указанный размер
  • Выравнивание в памяти соответствует размеру типа (4 байта для int32, 8 байт для int64)

Проверка на практике

Можно убедиться в размерах с помощью функции unsafe.Sizeof():

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    var i32 int32
    var i64 int64

    fmt.Println("int32 size:", unsafe.Sizeof(i32), "bytes") // 4
    fmt.Println("int64 size:", unsafe.Sizeof(i64), "bytes") // 8
}

Резюмируем

  • int32 = 4 байта (32 бита)
  • int64 = 8 байт (64 бита)
  • Размеры гарантированы языковой спецификацией
  • Для проверки можно использовать unsafe.Sizeof()