WEEK 2 • فهم الذاكرة

Memory Layout

إزاي البيانات متخزنة في الذاكرة

أساسيات الذاكرة

💾 إيه هي الـ RAM؟

📖 تشبيه الخزائن

تخيل الذاكرة (RAM) كصف طويل من الخزائن:

  • • كل خزنة ليها عنوان (Address) - رقم فريد
  • • كل خزنة بتشيل byte واحد (8 bits)
  • • العناوين بتكون أرقام متتالية (0x100, 0x101, 0x102...)

📏 أحجام البيانات

byte

1 byte

int

4 bytes

pointer

8 bytes (64-bit)

char

1-2 bytes

الفرق في الذاكرة

Array (Contiguous)

Memory Addresses:

...
10
25
33
47
58
...
...
100
104
108
10C
110
...

✓ المميزات:

  • • الوصول المباشر: O(1)
  • • استهلاك ذاكرة أقل (مفيش pointers)
  • • Cache-friendly (البيانات متجاورة)

✗ العيوب:

  • • الحجم ثابت (lazy resize = O(n))
  • • الإضافة/الحذف من الأول: O(n)

Linked List (Scattered)

Memory Addresses (متفرقة!):

10
→208
...
...
25
→350
...
100
ptr
...
...
208
ptr
...

✓ المميزات:

  • • الحجم ديناميكي (dynamic)
  • • الإضافة/الحذف من الأول: O(1)
  • • مش محتاج مكان متصل

✗ العيوب:

  • • الوصول: O(n) - لازم traverse
  • • ذاكرة زيادة للـ pointers
  • • Cache misses (البيانات متفرقة)

Memory Fragmentation

تفتت الذاكرة

⚠️ إيه هو الـ Fragmentation؟

لما بنحجز ونفضي ذاكرة كتير، بيبقى فيه فراغات صغيرة بين البيانات.
المشكلة: ممكن يكون فيه ذاكرة فاضية كتير، بس مش متصلة!

Before (No Fragmentation):

A
A
A
B
B
C
C
C

4 خلايا فاضية متصلة ✓

After Deletions (Fragmented):

A
A
C
C
D
D

6 خلايا فاضية بس متفرقة! ✗

💡 ليه ده مشكلة؟

لو عايز تحجز array من 4 خلايا، مش هتلاقي مكان متصل رغم إن فيه 6 خلايا فاضية!
الحل: Garbage Collection, Compaction, أو استخدام Linked Lists.

INTERACTIVE

Memory Allocation Demo

Free
Used
Fragmented

Enter a name (A-Z) and size, then allocate.