ถ้าคุณเข้าใจ stack ได้ดีแล้วคุณจะเข้าใจว่าหน่วยความจำทำงานอย่างไรในโปรแกรมและถ้าคุณเข้าใจว่าหน่วยความจำทำงานอย่างไรในโปรแกรมคุณจะเข้าใจว่า function store ในโปรแกรมและถ้าคุณเข้าใจว่า function store ในโปรแกรมคุณจะเข้าใจว่า คุณเข้าใจว่าฟังก์ชั่น recursive ทำงานอย่างไรคุณจะเข้าใจว่าคอมไพเลอร์ทำงานอย่างไรและถ้าคุณเข้าใจว่าคอมไพเลอร์ทำงานอย่างไรใจของคุณจะทำงานเป็นคอมไพเลอร์และคุณจะดีบักโปรแกรมใด ๆ ได้อย่างง่ายดาย
ให้ฉันอธิบายว่าสแต็คทำงานอย่างไร:
ก่อนอื่นคุณต้องรู้ว่าฟังก์ชั่นจัดเก็บในกองซ้อนได้อย่างไร:
กองการจัดเก็บค่าการจัดสรรหน่วยความจำแบบไดนามิก การจัดเก็บอัตโนมัติสแต็กการปันส่วนและค่าลบ
มาทำความเข้าใจกับตัวอย่าง:
def hello(x):
if x==1:
return "op"
else:
u=1
e=12
s=hello(x-1)
e+=1
print(s)
print(x)
u+=1
return e
hello(4)
ตอนนี้เข้าใจบางส่วนของโปรแกรมนี้:
ทีนี้มาดูสแต็คคืออะไรและอะไรคือสแต็กชิ้นส่วน:
การจัดสรรสแต็ก:
จำสิ่งหนึ่งถ้าฟังก์ชั่นใด ๆ ที่ได้รับ“ คืน” ไม่ว่าจะโหลด varibles ในตัวของเขาทั้งหมดหรืออะไรก็ตามที่มันจะส่งคืนจากสแต็กจะเป็นเฟรมสแต็กของเขาทันที มันหมายความว่าเมื่อฟังก์ชั่นแบบเรียกซ้ำได้รับสภาพฐานและเราใส่คืนค่าหลังจากสภาพพื้นฐานดังนั้นสภาพฐานจะไม่รอโหลดตัวแปรท้องถิ่นซึ่งตั้งอยู่ในส่วน "อื่น ๆ " ของโปรแกรมมันจะส่งคืนเฟรมปัจจุบันทันทีจากสแต็ค return frame ถัดไปอยู่ในบันทึกการเปิดใช้งาน ดูสิ่งนี้ในทางปฏิบัติ:
การยกเลิกการจัดสรรบล็อก:
ดังนั้นเมื่อใดก็ตามที่ฟังก์ชั่นพบคำสั่ง return มันจะลบเฟรมปัจจุบันออกจากสแต็ก
ในขณะที่ส่งคืนจากค่าสแต็กจะส่งกลับในลำดับย้อนกลับของลำดับที่จัดสรรในสแต็ก
เหล่านี้เป็นคำอธิบายสั้น ๆ และหากคุณต้องการทราบรายละเอียดเพิ่มเติมเกี่ยวกับกองซ้อนและการเรียกซ้ำสองครั้งอ่านโพสต์สองบล็อกนี้:
เพิ่มเติมเกี่ยวกับสแต็คทีละขั้นตอน
เพิ่มเติมเกี่ยวกับการเรียกซ้ำสองครั้งทีละขั้นตอนด้วยสแต็ก