0Pricing
Swift Academy · درس

المكدس مقابل الكومة: أين تعيش القيم

تعرّفوا إلى كيفية وجود البنى في المكدس والأصناف في الكومة، وتأثير ذلك في الأداء.

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

مرحبًا

يُعد فهم مكان وجود قيم Swift في الذاكرة — المكدس مقابل الكومة — أمرًا أساسيًا لكتابة تعليمات برمجية عالية الأداء ويمكن التنبؤ بسلوكها.

المكدس

المكدس كتلة متجاورة من الذاكرة تُدار تلقائيًا: • توجد المتغيرات المحلية والمعاملات الخاصة بالدوال هنا • يكون التخصيص بتعقيد O(1) — عبر تحريك مؤشر فقط • تُحرَّر الذاكرة تلقائيًا عند الخروج من النطاق • يكون المكدس محليًا للخيط — إذ يملك كل خيط مكدسه الخاص

الكومة

الكومة مساحة مشتركة للتخصيصات طويلة العمر: • توجد الكائنات هنا عندما يمتد عمرها إلى ما بعد نطاق واحد • يتطلب التخصيص العثور على ذاكرة حرة — وهو أكثر تكلفة • تديرها ARC للفئات • تكون مشتركة بين الخيوط — وتتطلب المزامنة

توجد البُنى على المكدس

```swift func compute() { var pt = CGPoint(x: 3, y: 4) // on the stack pt.x += 1 } // pt freed automatically ``` تُمرَّر البُنى الصغيرة بالنسخ — من دون تكلفة على الكومة.

توجد الفئات على الكومة

```swift class Dog { var name: String init(name: String) { self.name = name } } var d = Dog(name: "Rex") // Dog instance on heap // 'd' is a pointer on the stack ```

قد تستخدم البُنى الكبيرة الكومة

تستخدم البُنى الكبيرة (مثل المصفوفات والسلاسل النصية وأنواع القيم الكبيرة) النسخ عند الكتابة (COW) والتخزين على الكومة داخليًا، رغم أنها تتصرف كأنواع قيم: ```swift var arr = [Int](repeating: 0, count: 10_000) // The array's buffer is on the heap; 'arr' itself is a stack value ```

الالتقاط في عمليات الإغلاق

عندما تلتقط عملية إغلاق متغيرًا من نوع قيمة ويجب أن يستمر هذا المتغير بعد انتهاء النطاق، تضعه Swift في صندوق على الكومة: ```swift var count = 0 let increment = { count += 1 } // count captured in a heap box increment() print(count) // 1 ```

تغليف النوع الوجودي للبروتوكولات

قد يؤدي تخزين أنواع القيم الصغيرة في متغيرات `any Protocol` إلى تخصيص على الكومة (التغليف الوجودي): ```swift var shape: any Shape = Circle(radius: 5) // may allocate on heap ``` تُضمَّن الأنواع الصغيرة (≤3 كلمات) داخل المتغير؛ أما الأنواع الأكبر فتُغلَّف.

قياس التخصيصات

استخدموا قالب Allocations في Instruments لرؤية التخصيصات على الكومة: 1. Profile > Allocations 2. رشّحوا حسب الفئة أو التصنيف 3. تتبّعوا أعداد `alloc` مقابل `dealloc` غالبًا ما تشير أعداد التخصيص المرتفعة داخل الحلقات إلى تغليف غير متوقع.

آثار التصميم

• فضّلوا البُنى لأنواع البيانات قصيرة العمر التي تحمل بيانات — لسرعة المكدس • استخدموا الفئات عند الحاجة إلى الهوية أو الحالة المشتركة • تجنّبوا التخصيص داخل الحلقات الضيقة — وخصّصوا مسبقًا باستخدام `reserveCapacity` • أجروا تحليلًا للأداء قبل التحسين — فالتحسين المبكر يهدر الوقت

تحقق سريع

ما نوع الذاكرة الذي تُحرَّر مساحته تلقائيًا عند الخروج من نطاق الدالة؟

مراجعة

أهم النقاط: • المكدس: رخيص، تلقائي، محلي للخيط، ويُستخدم مع أنواع القيم • الكومة: مرنة، وتديرها ARC، وتُستخدم مع أنواع المراجع • تستخدم البُنى الكبيرة مخازن داخلية على الكومة (COW) • تضع عمليات الإغلاق التي تلتقط المتغيرات تلك المتغيرات في صناديق على الكومة • استخدموا Instruments Allocations لاكتشاف الضغط غير المتوقع على الكومة التالي: التغيير والمشاركة والتسمية المستعارة غير المتوقعة.

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

هل درس «المكدس مقابل الكومة: أين تعيش القيم» مجاني؟

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

ماذا ستتعلم في «المكدس مقابل الكومة: أين تعيش القيم»؟

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

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

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

كم من الوقت يستغرق درس «المكدس مقابل الكومة: أين تعيش القيم»؟

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

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

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

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

  1. المكدس مقابل الكومة: أين تعيش القيم
  2. التعديل والمشاركة والاسم المستعار غير المتوقّع
  3. رسوم بيانية مختلطة للقيم والمراجع
  4. تصميم واجهات API لدلالات القيم
← العودة إلى Swift Academy