func foo(i int) string {
return []string{"foo", "bar", "baz"}[i%3]
}
이런 함수 있으면 foo 호출할 때마다 매번 []string{"foo", "bar", "baz"} 생성됨?
최적화 하려면 전역변수로 초기화 하는거 말고 또 있음?
func foo(i int) string {
return []string{"foo", "bar", "baz"}[i%3]
}
이런 함수 있으면 foo 호출할 때마다 매번 []string{"foo", "bar", "baz"} 생성됨?
최적화 하려면 전역변수로 초기화 하는거 말고 또 있음?
slice는 모르겠고 list로 하면 매번 생성 안함
[3]string{....}
ㄹㅇ 무슨 원리임? 직접 까보고 싶은데 고랭 처음이라 어캐 뭘 봐야할지 모르겟다. 근데 매번 생성 안하려면 메모리 어딘가 그걸 계속 들고 있어야 하는데 명시할 필요없이 멋대로 그렇게 최적화 하는것도 문제 아냐? 디폴트는 매번 생성하고 뭐 static 키워드 같은걸루다가 명시해야지 그렇게 작동할거라 생각햇는데
컴파일 타임에 알 수 있고 list는 사이즈도 안 번하니까 bss나 code section에 들어가지.
아 그렇겟네 그럼 문제는 저걸 컴파일러가 [3]string{...} 으로 최적화하냐 마냐 문제려나
일단 list가 아니라 array를 말하고 싶었던 거 같은데 초기화한 전역 변수도 아니고 static 기능도 없는 Go에 함수에서 초기화한 변수가 BSS에 왜 들어감?
@9rum 나도 고랭 처음이라 용어 햇갈렷는데, 저게 비록 slice폼이지만 컴파일러가 array로 다루면 어차피 literal 취급되니 bss에 들갈수도 있는거 아님?
Go의 slice는 내부적으로 array의 시작 주소와 해당 array의 length, capacity 값을 들고다니는 구조체의 레퍼런스임. 따라서 slice를 생성하면 array가 생성되는데, 그걸 컴파일 타임에 알아서 BSS에 보내줄 이유는 없음
주소 찍어보면 되지
천재냐??
안되는 걸로 암