0Pricing
Zig Academy · درس

‏GeneralPurposeAllocator لأمان التصحيح

اكتشف تسرّبات الذاكرة والتحرير المزدوج

‏GeneralPurposeAllocator لأمان التصحيح درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.

خيارك الافتراضي

عندما لا تكون متأكدًا من المُخصِّص الذي ينبغي استخدامه، فاختر GeneralPurposeAllocator. فهو آمن ومرن وممتاز أثناء التطوير. 🛡️

إنشاء واحد

إن GeneralPurposeAllocator نوع عام تقوم بإنشائه. تنشئ instance، ثم تطلب منه واجهة المُخصِّص الفعلية.

var gpa = std.heap.GeneralPurposeAllocator(.{}){};

الحصول على المُخصِّص

استدعِ allocator() على الـinstance للحصول على std.mem.Allocator يمكنك تمريره. هذه هي الواجهة التي تستخدمها الدوال فعليًا.

const allocator = gpa.allocator();

التنظيف في النهاية

عند الانتهاء، استدعِ deinit() على الـinstance. في هذه المرحلة يُبلغ المُخصِّص عن أي مشكلات اكتشفها أثناء التشغيل.

defer _ = gpa.deinit();

اكتشاف تسرّبات الذاكرة

أهم ميزة هي أنه يكتشف التسرّبات. إذا خصّصتَ ذاكرة ولم تحرّرها، تُعيد deinit حالة تسرّب، فلا يختفي الخطأ.

اكتشاف التحرير المزدوج

تحرير الذاكرة نفسها مرتين خطأ شائع. يكتشف GeneralPurposeAllocator حالة double free ويُبلغ عنها بدلًا من إفساد الذاكرة.

اكتشاف الاستخدام بعد التحرير

الوصول إلى الذاكرة بعد تحريرها خطير. في البنيات الآمنة، يمكن لهذا المُخصِّص وضع علامة على use-after-free، محوّلًا الأعطال الصامتة إلى أخطاء واضحة.

التحقق من حالة التسرّب

القيمة التي تُعيدها deinit هي enum. قارنها مع .leak للتعامل مع الحالات التي لم تُحرَّر فيها الذاكرة، مثلًا في الاختبارات.

if (gpa.deinit() == .leak) @panic("memory leaked");

التهيئة وقت الترجمة

إن .{} التي تمرّرها هي بنية config تُقرأ وقت الترجمة. يمكنك ضبط فحوصات الأمان، لكن القيم الافتراضية مناسبة للعمل اليومي.

الأمان على حساب السرعة

تضيف كل هذه الفحوصات عبئًا إضافيًا. صُمّم GeneralPurposeAllocator لبنيات Debug وReleaseSafe، وليس للمسارات الساخنة الحساسة للأداء.

إعداد نموذجي

النمط دائمًا واحد: أنشئ الـinstance، وأجّل deinit، ثم احصل على allocator واستخدمه في كل موضع يحتاج فيه برنامجك إلى الذاكرة.

var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const a = gpa.allocator();

تحقّق سريع

فكّر في الميزة التي تجعل هذا المُخصِّص مميزًا أثناء التطوير.

مراجعة

تعرّفتَ إلى GeneralPurposeAllocator: أنشئه، وأجّل deinit، وخذ مُخصِّصه، ودعه يكتشف التسرّبات والتحرير المزدوج أثناء البناء. 🎯

الأسئلة الشائعة

هل درس «‏GeneralPurposeAllocator لأمان التصحيح» مجاني؟

نعم — نص درس «‏GeneralPurposeAllocator لأمان التصحيح» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏GeneralPurposeAllocator لأمان التصحيح»؟

اكتشف تسرّبات الذاكرة والتحرير المزدوج تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟

لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «‏GeneralPurposeAllocator لأمان التصحيح»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟

نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏GeneralPurposeAllocator لأمان التصحيح
  2. مخصّصات Arena للتحرير الجماعي
  3. ‏FixedBufferAllocator من دون Heap
  4. اختيار مخصّص الذاكرة حسب عبء العمل
← العودة إلى Zig Academy