Назад к вопросам
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 байт
Обратите внимание, что размер слайса не зависит от количества пустых структур внутри, так как слайс сам по себе является структурой (дескриптором), содержащей указатель на базовый массив, длину и вместимость.