คำถามติดแท็ก stack-allocation

1
เหตุใดจึงมีการจัดสรรหน่วยความจำสแต็คเมื่อไม่ใช้
ลองพิจารณาตัวอย่างต่อไปนี้: struct vector { int size() const; bool empty() const; }; bool vector::empty() const { return size() == 0; } รหัสการประกอบที่สร้างขึ้นสำหรับvector::empty(โดยเสียงดังกราวด้วยการเพิ่มประสิทธิภาพ): push rax call vector::size() const test eax, eax sete al pop rcx ret ทำไมมันจัดสรรพื้นที่สแต็ค? มันไม่ได้ใช้เลย pushและpopอาจถูกมองข้าม บิลด์ที่ปรับให้เหมาะสมของ MSVC และ gcc ยังใช้พื้นที่สแต็กสำหรับฟังก์ชั่นนี้ (ดูที่godbolt ) ดังนั้นต้องมีเหตุผล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.