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

 

자료형 사이즈가 작은 같은 자료 타입별로 멤버변수 순서를 정하면 메모리를 절약할 수 있다.