어떤 데이터가 구조체를 할당 한 변수를 가지고 있는지 Rust

Jan 16 2021

다음 코드가있는 경우 :

struct Person {
    age: i32
}

fn main() {
    let person =  Person{age : 52};
}

구조체를 사용하는 방법과 실제로 person 변수 안에있는 것은 무엇입니까?

구조체의 첫 번째 요소에 대한 포인터입니까? (모든 요소가 연속적 (?)이기 때문에 컴파일러는 모든 요소가 어디에 있는지 알 것입니다)

답변

5 Acorn Jan 16 2021 at 21:03

실제로 person 변수 안에 무엇이 있습니까?

"내부"는 age총 4 바이트 인 경우입니다.

구조체의 첫 번째 요소에 대한 포인터입니까?

아니요, 포인터가 아닙니다. 이는 값 그 자체 일 뿐이며, 이는 실제로 현재 프레임 / 함수의 스택에 저장된다는 것을 의미합니다 (실제적으로 말하면 컴파일러는 관찰 가능한 동작이 변경되지 않는 경우 메모리에서 완전히 제거하거나 사용하지 않을 수 있지만 개념적으로 변수는 스택에 배치됩니다.)

(모든 요소가 연속적 (?)이기 때문에 컴파일러는 모든 요소가 어디에 있는지 알 것입니다)

대부분의 컴파일 된 언어의 컴파일러는 항상 모든 유형의 정확한 레이아웃을 알고 있습니다 (특별한 경우 제외). 이것이 이러한 언어에서 미리 많은 최적화를 수행 할 수있는 이유입니다. 이 정보는 일반적으로 시스템 프로그래밍 언어에서 폐기되므로 일반적으로 리플렉션을 지원하지 않고 소스 코드로 다시 디 컴파일하기가 매우 어려운 이유입니다.