0Pricing
Zig Academy · บทเรียน

FixedBufferAllocator โดยไม่ใช้ฮีป

จัดสรรหน่วยความจำจากบัฟเฟอร์บนสแตก

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

จัดสรรโดยไม่ใช้ฮีป

FixedBufferAllocator จ่ายหน่วยความจำจากบัฟเฟอร์ที่คุณมีอยู่แล้ว ไม่ใช้ฮีป ไม่เรียกใช้ระบบปฏิบัติการ มีเพียงไบต์ของคุณเอง 🧱

คุณเป็นผู้จัดเตรียมบัฟเฟอร์

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

var buffer: [1024]u8 = undefined;

ห่อหุ้มบัฟเฟอร์

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

var fba = std.heap.FixedBufferAllocator.init(&buffer);

รับตัวจัดสรรหน่วยความจำของมัน

เรียก allocator() ตามปกติเพื่อรับอินเทอร์เฟซ โค้ดที่ใช้งานจะไม่ทราบเลยว่าหน่วยความจำมาจากบัฟเฟอร์คงที่แทนที่จะมาจากฮีป

const a = fba.allocator();

เลื่อนตัวชี้

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

หน่วยความจำอาจหมด

บัฟเฟอร์มีขนาดคงที่ ดังนั้นคำขออาจ ล้มเหลวด้วย OutOfMemory เมื่อไม่มีพื้นที่เหลือ คุณจัดการกรณีนี้เช่นเดียวกับข้อผิดพลาดในการจัดสรรอื่น ๆ

รีเซ็ตเพื่อนำกลับมาใช้ใหม่

เรียก reset() เพื่อเลื่อนออฟเซ็ตกลับไปยังจุดเริ่มต้น ตอนนี้บัฟเฟอร์เดิมว่างอีกครั้งและพร้อมสำหรับการจัดสรรรอบใหม่

fba.reset();

เหมาะกับระบบฝังตัว

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

คำนึงถึงช่วงอายุการใช้งาน

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

ใช้คู่กับ arena

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

การตั้งค่าทั่วไป

ขั้นตอนสั้น ๆ คือ ประกาศบัฟเฟอร์ init ตัวจัดสรรหน่วยความจำบนบัฟเฟอร์นั้น แล้วจัดสรรจนเต็ม จากนั้นเลือก reset เพื่อเริ่มต้นใหม่ได้

var buf: [256]u8 = undefined;
var fba = std.heap.FixedBufferAllocator.init(&buf);
const a = fba.allocator();

ตรวจสอบอย่างรวดเร็ว

ลองคิดดูว่า FixedBufferAllocator ได้หน่วยความจำมาจากที่ใด

ทบทวน

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

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

บทเรียน “FixedBufferAllocator โดยไม่ใช้ฮีป” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “FixedBufferAllocator โดยไม่ใช้ฮีป”

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

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

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

บทเรียน “FixedBufferAllocator โดยไม่ใช้ฮีป” ใช้เวลานานแค่ไหน

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

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

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

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

  1. GeneralPurposeAllocator เพื่อความปลอดภัยในการดีบัก
  2. ตัวจัดสรรหน่วยความจำแบบ Arena เพื่อคืนหน่วยความจำจำนวนมาก
  3. FixedBufferAllocator โดยไม่ใช้ฮีป
  4. การเลือกตัวจัดสรรหน่วยความจำตามภาระงาน
← กลับไปที่ Zig Academy