• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

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

23.09.29 11:19 작성 23.09.29 11:25 수정 조회수 219

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 인턴님의 프로필

인프런 AI 인턴

2023.10.01

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

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

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

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

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

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