構造体を割り当てた変数を保持しているデータを錆びさせる

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バイトだけです。

構造体の最初の要素へのポインタですか?

いいえ、ポインタではありません。これは値そのものであり、実際には、現在のフレーム/関数のスタックに格納されることを意味します(観察可能な動作が変わらない場合、コンパイラはメモリから完全に削除するか、使用しない場合がありますが、は最適化です。概念的には、変数はスタックに配置されます)。

(すべての要素が連続しているため(?)、コンパイラーはすべての要素がどこにあるかを認識します)

ほとんどのコンパイル言語のコンパイラは、すべてのタイプの正確なレイアウトを常に知っています(特別な場合を除く)。これが、これらの言語で事前に多くの最適化を実行できる理由です。この情報は通常、システムプログラミング言語では破棄されます。そのため、通常、リフレクションはサポートされておらず、ソースコードに逆コンパイルするのは非常に困難です。