array도 int처럼 고정사이즈는 아니잖아. length에 따라 달라지고 그걸 compiler가 계산할 수 있다면 고정사이즈가 되는거라고 생각함.
근데 string도 마찬가지아니야? string도 char array처럼 stack allocation할 수 있는 고정사이즈가 될 수 있는거 아니야?
string예시보면 다 heap allocation 기반으로 되어있어서 궁금.
array도 int처럼 고정사이즈는 아니잖아. length에 따라 달라지고 그걸 compiler가 계산할 수 있다면 고정사이즈가 되는거라고 생각함.
근데 string도 마찬가지아니야? string도 char array처럼 stack allocation할 수 있는 고정사이즈가 될 수 있는거 아니야?
string예시보면 다 heap allocation 기반으로 되어있어서 궁금.
heap allocation을 했을 때 중간에 유틸을 끼워넣거나 받을 수 있는 문자열의 폭을 동적으로 늘릴 때 좋긴하겠구나
이번에 Go 공부하면서 봤는데, int와 int를 더하면 int가 되고 사이즈는 변하지않음. 근데 string과 string을 더하면 주소값이 달라지면서 새로운 string 이 메모리에 올라가게 됨. 그냥 string이 특이한거아닐까? C랑 같은 방식이라고 생각하면 string은 고정사이즈가 될수없어서 그렇게 처리되는거겠지?
기본적으론 char*인데, string만의 특별한 유틸리티를 보장하려고 이해하면되려나..
나는 Rust 기준으로 찾아보긴한건데 일단 결론은 이렇슴. C에서는 char가 1byte, rust에서는 4byte의 표현력을 가짐. string utf-8 기준으로는 1byte를 고정으로 하자니 ascii밖에 포함을 못시키고, 4btyte를 고정으로 처리하는것은 메모리 낭비임. 그래서 그것을 유연하게 처리하는것이 str타입. 즉. Rust설계에 따라 string과 char[]은 다른것.
이런거 생각하면 string은 (특히 모던언어에서) 컴파일러단에서 특수하게 처리할 수 있는 특수형태(타입등..)가 있어야 하지 않을까 싶음.
파이썬은 heap이긴하지만 할당된 string 길이는 고정이긴 한데