แหล่งนิยายแปล แหล่งนิยาย นิยายแปล นิยายแต่ง มังงะ การ์ตูน อนิเมะ นายท่าน เว็บไซต์นายท่าน กระทู้สไลม์ สไลม์ยอดรัก

ผู้เขียน หัวข้อ: [เขียนโปรแกรมเรียนง่าย] บทที่ 5 - พื้นที่จัดสรรและหน่วยความจำ  (อ่าน 1966 ครั้ง)

ออฟไลน์ richter

  • ยอดกวีแห่งเขาเซนนิคุมะ
  • แม่ทัพหมีชั้นกลาง
  • **
  • กระทู้: 2,111
  • ถูกใจแล้ว: 1327 ครั้ง
  • ความนิยม: +50/-25
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 ครับ
« แก้ไขครั้งสุดท้าย: กันยายน 20, 2019, 11:25:39 AM โดย richter »
 
เหล่าหมีที่ถูกใจสิ่งนี้: 29Forever

ออฟไลน์ wanit000

  • หัวหน้าฝูงหมีกลาง
  • ****
  • กระทู้: 816
  • ถูกใจแล้ว: 710 ครั้ง
  • ความนิยม: +54/-66
อ้าว เปลี่ยน จาก แต่งนิยาย มา สอนคอม แทนชะแล้วเหรอ
 

ออฟไลน์ richter

  • ยอดกวีแห่งเขาเซนนิคุมะ
  • แม่ทัพหมีชั้นกลาง
  • **
  • กระทู้: 2,111
  • ถูกใจแล้ว: 1327 ครั้ง
  • ความนิยม: +50/-25
@wanit000  :: วอร์มอัพก่อนครับผม พักไปนานสำนวนอะไรอาจมีสนิมขึ้นเล็กน้อย ตอนถัดไปน่าจะเริ่มออกในสุดสัปดาห์นี้ครับ  ;D

 

Tags:
แหล่งนิยายแปล แหล่งนิยาย นิยายแปล นิยายแต่ง มังงะ การ์ตูน อนิเมะ นายท่าน เว็บไซต์นายท่าน กระทู้สไลม์ สไลม์ยอดรัก