next up previous contents index
Next: การจัดสรรพื้นที่เก็บข้อมูลที่สร้างใหม่ในส่วนของ Heap Up: การเรียกฟังก์ชั่นในฮาร์ดแวร์ Previous: การแปลงภาษา C สำหรับฟังก์ชั่น Recursive   Contents   Index

การเก็บข้อมูลที่สร้างใหม่ลงในสแตก

นอกจากที่เราใช้สแตกในการเก็บตัวแปรต่างๆ ที่รักษาค่าในรีจีสเตอร์ให้ฟังก์ชั่นสามารถทำงานได้ถูกต้องนั้น เราสามารถใช้สแตกในการเก็บค่า local variable ที่ไม่สามารถเก็บไว้ในรีจีสเตอร์ได้ทั้งหมด เช่นการเก็บอาร์เรย์ หรือ โครงสร้างข้อมูลแบบต่างๆ ส่วนของสแตกที่เก็บค่า local variables และ รีจีสเตอร์ที่เก็บไว้ในการเรียกฟังก์ชั่นเรียกว่า procedure frame หรือ activation record รูป 2.7 แสดงสถานะของสแตก ก่อน ระหว่าง และหลังการเรียกฟังก์ชั่น

Figure 2.7: ค่าในสแตก ก่อน ระหว่าง และหลังการเรียกฟังก์ชั่น a) ก่อน b) ระหว่าง c) หลัง การเรียกฟังก์ชั่นเมื่อมีการใช้ frame pointer
\includegraphics[width=6in]{fig/Chapter_2/Figure_2.16.eps}

ในซอฟต์แวร์ของ MIPS บางครั้งเราใช้ frame pointer $fp ในการชี้ไปยัง word แรกของเฟรมที่เป็นของฟังก์ชั่นนั้นๆ $sp อาจมีการเปลี่ยนแปลงระหว่างการทำงานของฟังก์ชั่น $fp จะเป็นตัวบอกตำแหน่งอ้างอิงของการตัวแปรในสแตกของฟังก์ชั่นนั้นๆ



Vara Varavithya 2006-11-06