เหตุใดการเรียก alloc( )
เป็นพารามิเตอร์ไปยังการเรียกใช้ฟังก์ชันอื่นเช่นนี้ func(x, alloca(size), z);
จึงถือว่าผิด ตามหนังสือชื่อ the linux programming interface
เนื่องจากพื้นที่สแต็กที่จัดสรรโดย alloca() จะปรากฏตรงกลางช่องว่างสำหรับอาร์กิวเมนต์ของฟังก์ชัน (ซึ่งวางไว้ในตำแหน่งคงที่ภายในเฟรมสแต็ก) แต่เราต้องใช้โค้ดเช่นนี้แทน:
void *y; y = alloca(size); func(x, y, z);
ในขณะที่นี่เป็นสิ่งที่ผิด
func(x, alloca(size), z); /* WRONG! */
ไม่ใช่ 2 ชิ้นนั้นควรจะเท่ากัน ในอันแรก alloca
ถูกเรียกก่อน จากนั้น func
จะถูกเรียกพร้อมกับค่าส่งคืน ดังนั้นหากมีใครสามารถอธิบายได้ว่า alloca
จัดสรรหน่วยความจำบนสแต็กที่ทำให้ทั้งสองวิธีแตกต่างกันอย่างไร
the linux programming interface
จะแก้ไขคำถามด้วยคำพูดจากหนังสือ - person Khaled   schedule 16.09.2020