ทำให้ข้อมูลที่เก็บตัวแปรซึ่งกำหนดโครงสร้างให้เป็นสนิม

Jan 16 2021

หากเรามีรหัสต่อไปนี้:

struct Person {
    age: i32
}

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

ฉันรู้วิธีใช้โครงสร้างและทั้งหมด แต่สิ่งที่จริงในตัวแปรบุคคล?

เป็นตัวชี้ไปยังองค์ประกอบแรกของโครงสร้างหรือไม่? (เนื่องจากองค์ประกอบทั้งหมดอยู่ติดกัน (?) ดังนั้นคอมไพเลอร์จะรู้ว่าองค์ประกอบทั้งหมดอยู่ที่ไหน)

คำตอบ

5 Acorn Jan 16 2021 at 21:03

สิ่งที่เป็นจริงในตัวแปรบุคคล?

สิ่งเดียวที่ "ภายใน" คือageทั้งหมด 4 ไบต์

เป็นตัวชี้ไปยังองค์ประกอบแรกของโครงสร้างหรือไม่?

ไม่มันไม่ได้เป็นตัวชี้ มันเป็นเพียงค่าของมันเองซึ่งหมายความว่ามันจะถูกเก็บไว้ในสแต็กของเฟรม / ฟังก์ชันปัจจุบันในทางปฏิบัติ (คอมไพเลอร์อาจลบออกจากหน่วยความจำทั้งหมดหรือไม่ได้ใช้ด้วยซ้ำหากพฤติกรรมที่สังเกตได้ไม่เปลี่ยนแปลง แต่นั่น คือการเพิ่มประสิทธิภาพ: ตามแนวคิดตัวแปรจะถูกวางไว้ในสแต็ก)

(เนื่องจากองค์ประกอบทั้งหมดอยู่ติดกัน (?) ดังนั้นคอมไพเลอร์จะรู้ว่าองค์ประกอบทั้งหมดอยู่ที่ไหน)

คอมไพเลอร์ในภาษาที่คอมไพล์ส่วนใหญ่มักจะรู้โครงร่างที่แน่นอนของทุกประเภทเสมอ (ยกเว้นกรณีพิเศษ) นั่นคือเหตุผลที่การเพิ่มประสิทธิภาพจำนวนมากสามารถทำได้ล่วงหน้าในภาษาเหล่านั้น โดยปกติข้อมูลนี้จะถูกทิ้งในภาษาการเขียนโปรแกรมระบบซึ่งเป็นเหตุผลว่าทำไมพวกเขาจึงไม่สนับสนุนการสะท้อนกลับและเหตุใดจึงค่อนข้างยากที่จะถอดรหัสกลับเป็นซอร์สโค้ด