FixedBufferAllocator من دون Heap
خصّص الذاكرة من مخزن على المكدس
FixedBufferAllocator من دون Heap درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.
التخصيص دون الكومة
يوفّر FixedBufferAllocator الذاكرة من مخزن تملكه مسبقًا. فلا كومة، ولا استدعاء لنظام التشغيل، بل وحدات البايت الخاصة بك فقط. 🧱
أنت توفّر المخزن
تبدأ بمصفوفة عادية، غالبًا على stack. وهذه المنطقة الثابتة هي كامل الذاكرة التي يُسمح للمُخصِّص بتوفيرها.
var buffer: [1024]u8 = undefined;تغليف المخزن
مرّر مخزنك إلى init لإنشاء المُخصِّص. ومن الآن فصاعدًا، يأتي كل تخصيص من وحدات البايت نفسها تمامًا.
var fba = std.heap.FixedBufferAllocator.init(&buffer);الحصول على مُخصِّصه
استدعِ allocator() كالمعتاد للحصول على الواجهة. ولا تستطيع الشيفرة التي تستخدمها معرفة أنها مدعومة بمخزن ثابت بدلًا من الكومة.
const a = fba.allocator();تحريك مؤشر
يحرّك التخصيص offset إلى الأمام داخل المخزن فحسب. وهذا يجعله سريعًا للغاية وتكلفته قابلة للتنبؤ تمامًا.
قد تنفد الذاكرة
للمخزن حجم ثابت، ولذلك قد يفشل الطلب بحالة OutOfMemory عند عدم بقاء مساحة. وتعالج ذلك كما تعالج أي خطأ في التخصيص.
إعادة الضبط لإعادة الاستخدام
استدعِ reset() لإعادة المؤشر إلى البداية. ويصبح المخزن نفسه فارغًا من جديد، جاهزًا لجولة جديدة من التخصيصات.
fba.reset();ممتاز للأنظمة المضمّنة
بما أنه لا يستخدم الكومة، يلائم هذا المُخصِّص الأنظمة المضمّنة والنوى وأي مكان تكون فيه الذاكرة الديناميكية غير متاحة أو محظورة.
انتبه إلى العمر الافتراضي
إذا كان المخزن موجودًا على stack، فإن ذاكرته تختفي عند عودة الدالة. لا تسمح مطلقًا بأن يتجاوز عمر التخصيصات منه عمر ذلك المخزن.
إقرانه مع Arena
من الحيل الشائعة تغليف مخزن ثابت داخل arena، ما يمنحك دلالات free الجماعي لمنطقة لا تلمس الكومة مطلقًا.
إعداد نموذجي
الطريقة قصيرة: صرّح عن مخزن، وهيّئ المُخصِّص عليه، ثم خصّص حتى يمتلئ، ويمكنك اختياريًا استدعاء reset للبدء من جديد.
var buf: [256]u8 = undefined;
var fba = std.heap.FixedBufferAllocator.init(&buf);
const a = fba.allocator();تحقّق سريع
فكّر في مصدر الذاكرة الذي يحصل منه FixedBufferAllocator على ذاكرته.
مراجعة
تعرّفتَ إلى FixedBufferAllocator: يوفّر الذاكرة من مخزن تملكه، ولا يلمس الكومة مطلقًا، ويُعاد ضبطه في خطوة واحدة قليلة التكلفة. 🎯
الأسئلة الشائعة
هل درس «FixedBufferAllocator من دون Heap» مجاني؟
نعم — نص درس «FixedBufferAllocator من دون Heap» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.
ماذا ستتعلم في «FixedBufferAllocator من دون Heap»؟
خصّص الذاكرة من مخزن على المكدس تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟
لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «FixedBufferAllocator من دون Heap»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟
نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- GeneralPurposeAllocator لأمان التصحيح
- مخصّصات Arena للتحرير الجماعي
- FixedBufferAllocator من دون Heap
- اختيار مخصّص الذاكرة حسب عبء العمل