golang
golang 메모리 패딩 고려한 구조체 최적화
kimbs0301
2024. 7. 5. 17:30
구조체 메모리 효율적으로 사용하기 위한 주의사항
멤버변수의 메모리의 위치를 할당할 때는 (64비트 운영체제 기준) 8바이트 이하의 크기를 가진 데이터 타입 중에서 가장 큰 크기를 가진 데이터 타입이 기준이 된다.
// Test
type Test struct {
num1 int8
num2 int32
num3 int8
num4 int64
}
// main
func main() {
t := Test{}
fmt.Println(unsafe.Sizeof(t))
fmt.Println(&t.num1)
fmt.Println(&t.num2)
fmt.Println(&t.num3)
fmt.Println(&t.num4)
}
실행 결과>
더보기
24
0xc0000ae090
0xc0000ae094
0xc0000ae098
0xc0000ae0a0
// Test
type Test struct {
num1 int8
num2 int8
num3 int32
num4 int64
}
// main
func main() {
t := Test{}
fmt.Println(unsafe.Sizeof(t))
fmt.Println(&t.num1)
fmt.Println(&t.num2)
fmt.Println(&t.num3)
fmt.Println(&t.num4)
}
실행 결과>
더보기
16
0xc0000ac070
0xc0000ac071
0xc0000ac074
0xc0000ac078
자료형 사이즈가 작은 같은 자료 타입별로 멤버변수 순서를 정하면 메모리를 절약할 수 있다.