ทำให้ข้อมูลที่เก็บตัวแปรซึ่งกำหนดโครงสร้างให้เป็นสนิม
หากเรามีรหัสต่อไปนี้:
struct Person {
age: i32
}
fn main() {
let person = Person{age : 52};
}
ฉันรู้วิธีใช้โครงสร้างและทั้งหมด แต่สิ่งที่จริงในตัวแปรบุคคล?
เป็นตัวชี้ไปยังองค์ประกอบแรกของโครงสร้างหรือไม่? (เนื่องจากองค์ประกอบทั้งหมดอยู่ติดกัน (?) ดังนั้นคอมไพเลอร์จะรู้ว่าองค์ประกอบทั้งหมดอยู่ที่ไหน)
คำตอบ
สิ่งที่เป็นจริงในตัวแปรบุคคล?
สิ่งเดียวที่ "ภายใน" คือage
ทั้งหมด 4 ไบต์
เป็นตัวชี้ไปยังองค์ประกอบแรกของโครงสร้างหรือไม่?
ไม่มันไม่ได้เป็นตัวชี้ มันเป็นเพียงค่าของมันเองซึ่งหมายความว่ามันจะถูกเก็บไว้ในสแต็กของเฟรม / ฟังก์ชันปัจจุบันในทางปฏิบัติ (คอมไพเลอร์อาจลบออกจากหน่วยความจำทั้งหมดหรือไม่ได้ใช้ด้วยซ้ำหากพฤติกรรมที่สังเกตได้ไม่เปลี่ยนแปลง แต่นั่น คือการเพิ่มประสิทธิภาพ: ตามแนวคิดตัวแปรจะถูกวางไว้ในสแต็ก)
(เนื่องจากองค์ประกอบทั้งหมดอยู่ติดกัน (?) ดังนั้นคอมไพเลอร์จะรู้ว่าองค์ประกอบทั้งหมดอยู่ที่ไหน)
คอมไพเลอร์ในภาษาที่คอมไพล์ส่วนใหญ่มักจะรู้โครงร่างที่แน่นอนของทุกประเภทเสมอ (ยกเว้นกรณีพิเศษ) นั่นคือเหตุผลที่การเพิ่มประสิทธิภาพจำนวนมากสามารถทำได้ล่วงหน้าในภาษาเหล่านั้น โดยปกติข้อมูลนี้จะถูกทิ้งในภาษาการเขียนโปรแกรมระบบซึ่งเป็นเหตุผลว่าทำไมพวกเขาจึงไม่สนับสนุนการสะท้อนกลับและเหตุใดจึงค่อนข้างยากที่จะถอดรหัสกลับเป็นซอร์สโค้ด