Назад к вопросам
Middle
352
questionbank

Какой размер памяти занимает пустая структура в языке Go?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Пустая структура в Go занимает 0 байт. Это связано с тем, что она не содержит полей и, следовательно, не требует выделения памяти для их хранения. При этом адрес у пустой структуры существует, но он одинаков для всех пустых структур.

Пример:

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	type Empty struct{} // Объявляем пустую структуру

	var e Empty
	fmt.Printf("Размер пустой структуры: %d байт\n", unsafe.Sizeof(e)) // Выводим размер
	fmt.Printf("Адрес пустой структуры: %p\n", &e) // Выводим адрес

	var e2 Empty
	fmt.Printf("Адрес другой пустой структуры: %p\n", &e2) // Адрес будет тот же

	s := make([]Empty, 10) // Слайс пустых структур
	fmt.Printf("Размер слайса из 10 пустых структур: %d байт\n", unsafe.Sizeof(s)) // Размер слайса (дескриптор)

	s2 := make([]Empty, 0, 10) // Слайс из 0 пустых структур с вместимостью 10
	fmt.Printf("Размер слайса из 0 пустых структур с вместимостью 10: %d байт\n", unsafe.Sizeof(s2)) // Размер слайса (дескриптор)
}

Вывод программы:

Размер пустой структуры: 0 байт
Адрес пустой структуры: 0x10dbf58
Адрес другой пустой структуры: 0x10dbf58
Размер слайса из 10 пустых структур: 24 байт
Размер слайса из 0 пустых структур с вместимостью 10: 24 байт

Обратите внимание, что размер слайса не зависит от количества пустых структур внутри, так как слайс сам по себе является структурой (дескриптором), содержащей указатель на базовый массив, длину и вместимость.