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

 

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

 

'golang' 카테고리의 다른 글

golang 함수 문자열 포인터 파라미터  (0) 2024.07.05
golang init 함수 호출 시점  (0) 2024.07.05
golang json gojay 라이브러리  (0) 2024.07.05
golang Struct Embedding  (1) 2024.07.05
golang file scanner  (0) 2024.07.05