rust
에서 primitive types
, 내장 타입이 존재한다. 이 타입들은 Copy
트레잇을 기본적으로 구현하기때문에 소유권이 이동되지 않고, 값 복사가 발생한다.
미리 할당된 스택 메모리에서 값을 읽어 쓰는 행위를 하기 때문에 속도가 상당히 빠르다는 장점이 있다.
스택에서 내장 타입
들이 어떻게 동작하는지 정확히 정리를 해보겠다.
기본적으로 rust
의 내장 타입으로는, 정수
, 부동 소수
, 불리언
, 문자
, 포인터
등이 있다.
간단히 i32
타입의 주솟값을 출력해보겠다.
fn main() {
let a = 10;
let b = a;
println!("a address: {:p}", &a);
println!("b address: {:p}", &b);
}
결과로는
주솟값이 4바이트 차이 나는 것을 확인할 수 있다.
또한 값이 모두 출력되는 것으로 a
를 b
에 대입했지만 소유권이 move
되지 않고 copy
가 되는 것을 확인할 수 있다.
스택은 메모리가 os에 의해 미리 할당이 되기 때문에 스택 포인터만 옮기면 되므로 속도가 매우 빠르다.
또한 rust
에서 소유권이 이동하지 않고 복사가 일어나기 때문에 소유권 문제에 대해서 깊게 생각할 필요가 없다. 그러나 타입이 고정되지 않거나, 동적으로 사이즈가 변할 수 있는 경우에는 힙 메모리를 사용해야 한다.
정확히 스택이 어떻게 동작하는지에 대해서 이해를 한 뒤 다시 러스트의 기본 내장 타입들에 대해서 생각하니 새로운 것 같다. 다음엔 힙에 할당되는 타입들에 대해서 자세히 알아볼 예정이다.