นี่หมายถึงตัวชี้ฐานหรือตัวชี้สแต็คกำลังเคลื่อนย้ายที่อยู่หน่วยความจำลงไปแทนที่จะขึ้นไปหรือไม่? ทำไมถึงเป็นอย่างนั้น?
ใช่push
คำแนะนำจะลดตัวชี้สแต็กและเขียนไปยังสแต็กในขณะที่pop
ทำย้อนกลับอ่านจากสแต็กและเพิ่มตัวชี้สแต็ก
นี่เป็นเรื่องในประวัติศาสตร์สำหรับเครื่องจักรที่มีหน่วยความจำ จำกัด กองซ้อนถูกวางไว้สูงขึ้นเรื่อย ๆ ในขณะที่กองนั้นวางต่ำและโตขึ้น มี "ช่องว่างเดียวของ" หน่วยความจำว่าง "- ระหว่างกอง & กองและช่องว่างนี้มีการใช้ร่วมกันทั้งสองสามารถเติบโตเป็นช่องว่างตามความต้องการของแต่ละบุคคล ดังนั้นโปรแกรมจะเรียกใช้หน่วยความจำไม่เพียงพอเมื่อสแต็กและฮีปชนกันโดยไม่มีหน่วยความจำว่าง
หากสแต็คและฮีปเติบโตในทิศทางเดียวกันแสดงว่ามีช่องว่างสองช่องและสแต็กไม่สามารถเติบโตเป็นช่องว่างของฮีปได้ (ในทางกลับกันก็เป็นปัญหาเช่นกัน)
ในขั้นต้นโปรเซสเซอร์ไม่มีคำแนะนำการจัดการสแต็กโดยเฉพาะ อย่างไรก็ตามในขณะที่เพิ่มการรองรับสแต็คเข้ากับฮาร์ดแวร์จึงใช้รูปแบบการเติบโตที่ลดลงและโปรเซสเซอร์ยังคงติดตามรูปแบบนี้ในปัจจุบัน
หนึ่งอาจโต้แย้งว่าบนเครื่อง 64- บิตมีพื้นที่ที่อยู่เพียงพอที่จะอนุญาตให้มีหลายช่องว่าง - และเป็นหลักฐานช่องว่างหลายจำเป็นต้องเป็นกรณีเมื่อกระบวนการมีหลายกระทู้ แม้ว่าสิ่งนี้จะไม่เพียงพอที่จะเปลี่ยนแปลงสิ่งต่างๆรอบตัวเนื่องจากระบบหลาย ๆ ช่องทาง แต่ทิศทางการเติบโตนั้นเป็นกฎเกณฑ์โดยพลการ
คุณจะต้องเปลี่ยนการจัดการคำแนะนำในการสั่งซื้อเพื่อเปลี่ยนทิศทางของสแต็คหรืออื่น ๆ ให้ขึ้นกับการใช้งานของสแต็คของ CPU ที่อุทิศตนผลักดันและ popping คำแนะนำ (เช่นpush
, pop
, call
, ret
, อื่น ๆ )
โปรดทราบว่าสถาปัตยกรรมชุดคำสั่ง MIPS ไม่ได้ทุ่มเทpush
& pop
ดังนั้นจึงเป็นประโยชน์ในการขยายสแต็คในทิศทางใดทิศทางหนึ่ง - คุณยังอาจต้องการโครงร่างหน่วยความจำหนึ่งช่องว่างสำหรับกระบวนการเธรดเดียว แต่สามารถขยายสแต็กขึ้นและกอง ลงต่ำ อย่างไรก็ตามหากคุณทำเช่นนั้นรหัสC varargsบางตัวอาจต้องมีการปรับเปลี่ยนในแหล่งที่มาหรือในการผ่านพารามิเตอร์ภายใต้ประทุน
(อันที่จริงแล้วเนื่องจากไม่มีการจัดการสแต็กโดยเฉพาะบน MIPS เราสามารถใช้การเพิ่มขึ้นก่อนหรือหลังหรือการลดลงก่อนหรือหลังสำหรับการกดลงบนสแต็คตราบใดที่เราใช้การย้อนกลับที่แน่นอนสำหรับการหลุดออกจากสแต็ค ระบบปฏิบัติการเคารพรูปแบบการใช้สแต็คที่เลือกแน่นอนในระบบฝังตัวบางตัวและระบบการศึกษาบางระบบสแต็ค MIPS จะโตขึ้น)
-4(%rbp)
จะไม่ย้ายตัวชี้ฐานเลยและ+4(%rbp)
อาจไม่สามารถใช้งานได้