8
ตัวแปรถูกจัดเก็บในและดึงข้อมูลจากสแต็กของโปรแกรมอย่างไร
ขออภัยล่วงหน้าสำหรับความไร้เดียงสาของคำถามนี้ ฉันเป็นศิลปินอายุ 50 ปีที่พยายามเข้าใจคอมพิวเตอร์อย่างถูกต้องเป็นครั้งแรก ดังนั้นที่นี่ไป ฉันพยายามเข้าใจว่าประเภทข้อมูลและตัวแปรได้รับการจัดการโดยคอมไพเลอร์อย่างไร (โดยทั่วไปฉันรู้ว่ามันมีจำนวนมาก) ฉันขาดอะไรบางอย่างในการทำความเข้าใจเกี่ยวกับความสัมพันธ์ระหว่างหน่วยเก็บข้อมูลใน "สแต็ก" และประเภทค่าและที่เก็บข้อมูลใน "กอง" และประเภทอ้างอิง (เครื่องหมายคำพูดมีความหมายว่าฉันเข้าใจว่าเงื่อนไขเหล่านี้เป็นนามธรรม ในบริบทที่เรียบง่ายเช่นเดียวกับที่ฉันวางกรอบคำถามนี้) อย่างไรก็ตามแนวคิดง่าย ๆ ของฉันคือประเภทเช่น Booleans และจำนวนเต็มไปที่ "สแต็ค" เพราะพวกเขาสามารถเพราะพวกเขาเป็นที่รู้จักหน่วยงานในแง่ของพื้นที่จัดเก็บและขอบเขตการควบคุมได้อย่างง่ายดายตาม แต่สิ่งที่ฉันไม่ได้รับก็คือแอปพลิเคชันอ่านแล้วว่าตัวแปรในสแต็กถ้าฉันประกาศและกำหนดxเป็นจำนวนเต็มพูดx = 3และที่เก็บถูกสงวนไว้ในสแต็คจากนั้นค่าของ3มันจะถูกเก็บไว้ที่นั่น ฟังก์ชั่นเดียวกันฉันประกาศและกำหนดyเป็นพูด4แล้วจากนั้นฉันก็ใช้xในการแสดงออกอื่น (พูดz = 5 + x) โปรแกรมสามารถอ่านได้อย่างไรxเพื่อประเมินzเมื่อมันอยู่ด้านล่างyบนกอง? ฉันขาดอะไรบางอย่างชัดเจน มันเป็นที่ตั้งบนสแต็คเป็นเพียงเกี่ยวกับอายุการใช้งาน / ขอบเขตของตัวแปรและว่าสแต็คทั้งหมดสามารถเข้าถึงโปรแกรมได้ตลอดเวลา? ถ้าเป็นเช่นนั้นนั่นหมายความว่ามีบางดัชนีอื่น ๆ ที่เก็บที่อยู่ของตัวแปรในสแต็กเพื่อให้สามารถดึงค่าได้หรือไม่? แต่ฉันคิดว่าจุดทั้งหมดของสแต็คคือค่านั้นถูกเก็บไว้ในที่เดียวกับที่อยู่ตัวแปรหรือไม่ ในใจที่อ่อนแอของฉันดูเหมือนว่าหากมีดัชนีอื่นนี้เราก็กำลังพูดถึงบางสิ่งบางอย่างที่มากกว่ากอง ฉันสับสนอย่างชัดเจนและฉันแค่หวังว่าจะมีคำตอบง่ายๆสำหรับคำถามง่าย ๆ ของฉัน ขอบคุณที่อ่านมาไกลขนาดนี้