構造体を割り当てた変数を保持しているデータを錆びさせる
次のコードがある場合:
struct Person {
age: i32
}
fn main() {
let person = Person{age : 52};
}
私は構造体の使い方を知っていますが、実際にはperson変数の中に何がありますか?
構造体の最初の要素へのポインタですか?(すべての要素が連続しているため(?)、コンパイラーはすべての要素がどこにあるかを認識します)
回答
5 Acorn
実際にperson変数の内部には何がありますか?
「内部」にあるのはage
、合計4バイトだけです。
構造体の最初の要素へのポインタですか?
いいえ、ポインタではありません。これは値そのものであり、実際には、現在のフレーム/関数のスタックに格納されることを意味します(観察可能な動作が変わらない場合、コンパイラはメモリから完全に削除するか、使用しない場合がありますが、は最適化です。概念的には、変数はスタックに配置されます)。
(すべての要素が連続しているため(?)、コンパイラーはすべての要素がどこにあるかを認識します)
ほとんどのコンパイル言語のコンパイラは、すべてのタイプの正確なレイアウトを常に知っています(特別な場合を除く)。これが、これらの言語で事前に多くの最適化を実行できる理由です。この情報は通常、システムプログラミング言語では破棄されます。そのため、通常、リフレクションはサポートされておらず、ソースコードに逆コンパイルするのは非常に困難です。