เหตุใด Zig จึงไม่มีการจัดสรรที่ซ่อนอยู่
การจัดสรรจะถูกส่งเข้ามาอย่างชัดเจนเสมอ
เหตุใด 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใด Zig จึงไม่มีการจัดสรรที่ซ่อนอยู่
- ส่วนติดต่อสำหรับตัวจัดสรร
- alloc, free, create, destroy
- รายการแบบไดนามิกด้วย ArrayList