https://github.com/Richter03/gitboard/issues/17หน่วยความจำที่เราควบคุมได้ในภาษาระดับสูงโดยทั่วไปจะมีอยู่ด้วยกัน 2 แบบได้แก่
1. Heap
2. Stack
เมื่อเกิดการใช้งานชุดคำสั่งประมวลผลใดๆ ขึ้น ตัวโปรแกรมก็จะทำการจัดสรรพื้นที่ทำงาน Stack-Frame ให้แก่ชุดคำสั่งประมวลผลนั้นๆ ซึ่งพื้นที่จัดสรรจะถูกเวนคืนอัตโนมัติเมื่อชุดคำสั่งประมวลผลนั้นสิ้นสุดลง ซึ่งในทางกลับกันหากชุดคำสั่งประมวลผลนั้นๆ ยังทำงานไม่เสร็จแล้วมีการใช้งานชุดคำสั่งประมวลผลใหม่เรื่อยๆ ซึ่งก็ยังคงทำงานอยู่เช่นกันก็จะทำให้ พื้นที่จัดสรร Stack-Frame นั้นหมดลงไปทำให้เกิดสภาวะ Stack overflow
Stack overflow

Stack overflow คือสภาวะที่พื้นที่จัดสรรของหน่วยความจำไม่เพียงพอ โดยขอบเขตขนาดความจุของพื้นที่จัดสรรนี้ขึ้นอยู่กับตัวระบบแปลภาษาโปรแกรมเป็นภาษาคอมนั้นๆ จะกำหนดซึ่งอยู่นอกเหนือการควบคุมโดยทั่วไปของเรา อย่างไรก็ดีภาษาเชิงฟังค์ชั่นนั้นก็ได้มีทางออกสำหรับปัญหานี้
Tail call recursion
เป็นชุดคำสั่งพิเศษที่จะแจ้งให้กับระบบว่าหลังจากเรียกใช้ชุดคำสั่งประมวลผลถัดไปแล้วให้ถือว่าชุดคำสั่งประมวลผลนี้ได้สิ้นสุดหน้าที่ลง เวนคืนพื้นที่จัดสรรของชุดคำสั่งประมวลผลนี้ได้เลย โดยชุดคำสั่งพิเศษนี้มีอยู่ด้วยกัน 2 แบบได้แก่
1. Tail call นั้นเป็นคำสั่งพิเศษเพิ่มเติมเวลาเราเรียกใช้ชุดคำสั่งประมวลผลซึ่งโดยทั่วไปแล้วเราแทบไม่จำเป็นต้องปรับเปลี่ยนอะไรมากนอกเสียจากว่าปรับวิธีเขียนชุดคำสั่งประมวลผลจากแบบ B_Sums เป็น A_Sums ในบทที่ 4
2. Jump เป็นชุดคำสั่งพิเศษที่จะวาปเราจากชุดคำสั่งประมวลผลปัจจุบันไปยังชุดคำสั่งประมวลผลเป้าหมายโดยใช้ข้อมูลนำเข้าต่อเนื่องไปเลย ซึ่งการใช้ Jump นี้จะมีเงื่อนไขย่อยๆ คือชุดคำสั่งประมวลผลเป้าหมายนั้นจะต้องมีการรับข้อมูลนำเข้าเหมือนๆ กันทั้งประเภทและจำนวน
อย่างไรก็ดีคำสั่งพิเศษนี้นั้นไม่มีปรากฏอยู่ใน C# และ VB แม้แต่ F# เองคำสั่งพิเศษเหล่านี้ก็ถูกซ่อนเอาไว้อย่างมิดชิดไม่ให้เราเข้าถึงได้โดยตรงง่ายๆ แต่ถ้าเราเขียน MSIL/CIL โดยตรงแล้วก็จะสามารถจัดการเองได้ แต่การเข้าจัดการโค๊ดเบื้องลึกเองนั้นไม่สามารถทำในเว็บเขียนโปรแกรมออนไลน์ได้ ดังนี้ผมจึงของเก็บส่วนนี้เอาไว้จนกว่าจะถึงบทที่เราเริ่มเขียนโค๊ดกันบนแอพ Visual Studio ครับ