Zig Academy · บทเรียน

เหตุใด Zig จึงไม่มีการจัดสรรที่ซ่อนอยู่

การจัดสรรจะถูกส่งเข้ามาอย่างชัดเจนเสมอ

บทเรียน 1 จาก 413 ขั้นตอน

เหตุใด Zig จึงไม่มีการจัดสรรที่ซ่อนอยู่ เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

หน่วยความจำต้องระบุอย่างชัดเจน

ใน Zig ไม่มีฟังก์ชันจากไลบรารีมาตรฐานใดแอบขอหน่วยความจำจากฮีป หากโค้ดต้องการ จัดสรร ก็ต้องระบุออกมาอย่างชัดเจน 📦

คุณส่ง Allocator เข้าไป

ทุกสิ่งที่จัดสรรหน่วยความจำจะรับ ตัวจัดสรรหน่วยความจำเป็นพารามิเตอร์ หน่วยความจำจะไม่ปรากฏขึ้นเอง เว้นแต่คุณจะส่งเครื่องมือสำหรับสร้างมันให้ฟังก์ชัน

fn buildList(allocator: std.mem.Allocator) !void {}

ไม่มีคำสำคัญ new ที่ซ่อนอยู่

Zig ไม่มีตัวดำเนินการ new และไม่มีตัวเก็บขยะ ไม่มีสิ่งใดแอบเข้าถึงฮีปอยู่เบื้องหลังเหมือนในหลายภาษา

เหตุใดเรื่องนี้จึงสำคัญ

เนื่องจากการจัดสรรมองเห็นได้อย่างชัดเจน คุณจึงรู้เสมอว่า ที่ใดเป็นแหล่งที่มาของหน่วยความจำ ซึ่งสำคัญอย่างยิ่งสำหรับชิปฝังตัว เคอร์เนล และลูปเกมที่ต้องทำงานรวดเร็ว

อ่านลายเซ็นของฟังก์ชัน

ฟังก์ชันที่อาจจัดสรรหน่วยความจำจะแสดงเรื่องนี้ไว้ใน ลายเซ็น: ฟังก์ชันจะรับตัวจัดสรรหน่วยความจำ และมักคืนค่าชุดข้อผิดพลาดที่มี !

fn dupe(a: std.mem.Allocator, s: []const u8) ![]u8 {}

สแตกนั้นไม่เสียค่าใช้จ่าย

ตัวแปรภายในทั่วไปอยู่บน สแตกและไม่ต้องใช้ตัวจัดสรรหน่วยความจำ คุณจะใช้ตัวจัดสรรก็ต่อเมื่อค่าต้องมีอายุยืนกว่าฟังก์ชันหรือจำเป็นต้องขยายขนาดขณะทำงาน

var x: i32 = 5; // stack, no allocation

การจัดสรรอาจล้มเหลว

การขอหน่วยความจำจากฮีปอาจ ล้มเหลวได้ ดังนั้นฟังก์ชันที่จัดสรรจึงคืนค่าข้อผิดพลาด คุณต้องจัดการกรณี OutOfMemory ที่อาจเกิดขึ้น และห้ามเพิกเฉย

คุณเป็นเจ้าของสิ่งที่สร้าง

ผู้ใดก็ตามที่เรียกใช้ตัวจัดสรรหน่วยความจำจะ เป็นเจ้าของผลลัพธ์และต้อง free ผลลัพธ์นั้น Zig จะไม่ free หน่วยความจำให้คุณ ความเป็นเจ้าของจึงชัดเจนเสมอ

สลับตัวจัดสรรได้อย่างอิสระ

เนื่องจากตัวจัดสรรเป็นพารามิเตอร์ คุณจึง สลับกลยุทธ์ได้โดยไม่ต้องเปลี่ยนตรรกะ การทดสอบใช้ตัวจัดสรรหนึ่ง ส่วนระบบจริงใช้อีกตัวหนึ่ง

ไลบรารียังคงโปร่งใส

ไลบรารีที่เขียนอย่างดีจะไม่ซ่อนการจัดสรรหน่วยความจำ แต่จะรับ ตัวจัดสรรหน่วยความจำจากคุณ ทำให้คุณควบคุมหน่วยความจำได้แม้ภายในโค้ดของผู้อื่น

คาดเดาได้จากการออกแบบ

กฎนี้เป็นส่วนหนึ่งของคำมั่นสัญญาของ Zig ที่จะไม่มีลำดับการทำงานที่ซ่อนอยู่ การจัดสรรอย่าง ชัดเจนทำให้โปรแกรมคาดเดาได้และวิเคราะห์เหตุผลได้ง่าย ✅

ตรวจสอบความเข้าใจ

ลองทบทวนว่า ฟังก์ชัน Zig ได้ความสามารถในการจัดสรรหน่วยความจำมาอย่างไร

สรุปทบทวน

คุณได้เห็นแล้วว่า Zig ไม่มีการจัดสรรที่ซ่อนอยู่: หน่วยความจำจะมาจากตัวจัดสรรที่คุณส่งเข้าไปเท่านั้น และคุณเป็นเจ้าของพร้อมทั้งต้อง free สิ่งที่คุณสร้าง 🎯

เริ่มต้นได้ฟรี

เรียนรู้ Zig ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “เหตุใด Zig จึงไม่มีการจัดสรรที่ซ่อนอยู่” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เหตุใด Zig จึงไม่มีการจัดสรรที่ซ่อนอยู่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เหตุใด Zig จึงไม่มีการจัดสรรที่ซ่อนอยู่”

การจัดสรรจะถูกส่งเข้ามาอย่างชัดเจนเสมอ คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “เหตุใด Zig จึงไม่มีการจัดสรรที่ซ่อนอยู่” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใด Zig จึงไม่มีการจัดสรรที่ซ่อนอยู่
  2. ส่วนติดต่อสำหรับตัวจัดสรร
  3. alloc, free, create, destroy
  4. รายการแบบไดนามิกด้วย ArrayList
← กลับไปที่ Zig Academy