인프런 커뮤니티 질문&답변

김영하님의 프로필 이미지
김영하

작성한 질문수

우아한 고성능 프로그래밍 언어 Rust 입문 및 활용

변수와 불변성, 상수, 변수 가리기

Integer는 자동으로 copy되서(copy type)(integer 는 stack에 할당되서)

해결된 질문

작성

·

282

·

수정됨

0

예문을

Integer먼저 넣고 두번째 변수는 String 이게 더 좋지 않을까요?

 

출처

 

https://www.reddit.com/r/rust/comments/up1yhg/rust_ownership_for_integer_vs_string_literals/

What’s going on under the covers is that when a variable who’s type has a constant length (like an integer) gets passed to a function, rust allocates space on the call stack for that variable and copies it’s value into the function’s call stack. Thus the instance of X that your function gets is different (is at a different memory address) than the copy of X that was passed to it. For strings, the compiler doesn’t know how much space to allocate (because the function could be called with your constant length string or any other string).

답변 2

0

김대현님의 프로필 이미지
김대현
지식공유자

네 의견 감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요. Integer와 String의 동작 원리에 대해 설명해 드릴게요.

Integer는 복사되어 전달되는 반면, String은 복사되지 않고(Deep Copy가 일어나지 않고) 참조만 전달되기 때문에 메모리에 대한 다른 방식으로 처리됩니다. 이는 Stack에 할당되는지 여부와는 관련이 없습니다.

Integer는 일반적으로 고정된 크기를 가지고 있기 때문에 함수에 전달할 때 스택에 메모리 공간이 할당되고, 해당 변수의 값이 함수의 호출 스택으로 복사됩니다. 따라서 함수에서 사용되는 X의 인스턴스는 원본 X의 복사본과 메모리 주소가 다르게 됩니다.

반면에 String은 컴파일러가 얼마만큼의 공간을 할당해야 하는지 알 수 없기 때문에 (상수 길이의 문자열이 될 수도 있고, 다른 길이의 문자열이 될 수도 있으니까요) 스택에 공간을 할당할 수 없습니다. 대신 힙(heap)에 문자열 데이터를 저장하고, 문자열 데이터에 대한 참조(reference)를 함수에 전달합니다. 이렇게 되면 원본 문자열과 함수에서 사용되는 문자열은 동일한 데이터를 참조하고 있게 됩니다.

결론적으로, Integer와 String은 복사되고 전달되는 방식이 다르며, 이에 따라 메모리 할당 방식이 달라집니다. Stack과 Heap의 개념과도 연관이 있지만, 이는 Integer vs String의 차이와 직접적으로 관련된 것은 아닙니다.

더 궁금한 점이 있으시면 언제든지 물어보세요!

김영하님의 프로필 이미지
김영하

작성한 질문수

질문하기