متجه رائع
في برمجة الكمبيوتر ، يعتبر متجه dope بنية بيانات تستخدم للاحتفاظ بمعلومات حول كائن بيانات ، [ 1 ] وخاصة تخطيط الذاكرة الخاص به .
غاية
تُستخدم متجهات البيانات عادةً لوصف المصفوفات ، التي تخزن عادةً عدة نسخ من نوع بيانات معين ككتلة متجاورة من الذاكرة. على سبيل المثال، تتطلب مصفوفة تحتوي على 100 عنصر، يشغل كل منها 32 بايت، مساحة 100 × 32 بايت. لا تحتوي كتلة الذاكرة هذه، في حد ذاتها، على مكان لتتبع حجم المصفوفة (أو أي كائن آخر) الإجمالي، أو حجم كل عنصر داخلها، أو عدد العناصر التي تحتويها. يُعد متجه البيانات مكانًا لتخزين هذه المعلومات. يمكن لمتجهات البيانات أيضًا وصف هياكل قد تحتوي على مصفوفات أو عناصر متغيرة.
إذا تم تخزين مصفوفة كهذه بشكل متجاور، بحيث يكون البايت الأول في موقع الذاكرة M ، فإن البايت الأخير يكون في الموقع M + 3199. من أهم مزايا هذا الترتيب سهولة تحديد موقع العنصر N ، حيث يبدأ من الموقع M + ( N × 32) . بالطبع، يجب معرفة قيمة 32 (وتُسمى هذه القيمة عادةً "خطوة" المصفوفة أو "عرض" عناصرها). يُطلق على التنقل في بنية بيانات المصفوفة باستخدام فهرس اسم " التقدير التقريبي" .
مع ذلك، فإن هذا الترتيب (دون إضافة متجهات التتبع) يعني أن معرفة موقع العنصر N لا تكفي لاكتشاف فهرسه N نفسه، أو خطوة البحث، أو ما إذا كانت هناك عناصر عند N − 1 أو N + 1. على سبيل المثال، قد تقوم دالة أو طريقة بالتكرار على جميع عناصر مصفوفة وتمرير كل عنصر إلى دالة أو طريقة أخرى، والتي لا تعرف أن العنصر جزء من مصفوفة على الإطلاق، ناهيك عن مكان وجوده أو حجمه.
بدون متجه بيانات، حتى معرفة عنوان المصفوفة بأكملها لا تُحدد حجمها. وهذا مهم لأن الكتابة إلى العنصر رقم N + 1 في مصفوفة تحتوي على N عنصر فقط، قد تُؤدي إلى فقدان بعض البيانات الأخرى. ولأن العديد من لغات البرمجة تُعامل السلاسل النصية كنوع من المصفوفات، فإن هذا يُؤدي مباشرةً إلى مشكلة تجاوز سعة المخزن المؤقت الشهيرة .
يُقلل متجه البيانات الوصفية من هذه المشاكل بتخزين كمية صغيرة من البيانات الوصفية مع مصفوفة (أو كائن آخر). باستخدام متجهات البيانات الوصفية، يُمكن للمُترجم بسهولة (واختياريًا) إدراج تعليمات برمجية تمنع الكتابة العرضية خارج حدود المصفوفة أو الكائن الآخر. كما يُمكن للمُبرمج الوصول إلى متجه البيانات الوصفية عند الحاجة، لأغراض السلامة أو غيرها.
وصف
تختلف مجموعة البيانات الوصفية المضمنة في متجه dope من لغة برمجة و/أو نظام تشغيل إلى آخر، ولكن قد يحتوي متجه dope الخاص بمصفوفة على ما يلي:
- مؤشر إلى موقع بداية عناصر المصفوفة في الذاكرة (عادةً ما يكون هذا الموقع مطابقًا لموقع العنصر الصفري في المصفوفة (العنصر الذي تبدأ جميع فهارسه بالصفر). (قد لا يكون هذا هو العنصر الأول الفعلي إذا لم تبدأ الفهارس بالصفر).
- مؤشر إلى موقع العنصر الأخير في المصفوفة، والمعروف أيضًا باسم مؤشر الذيل.
- طول المصفوفة
- نوع كل عنصر من عناصر المصفوفة (عدد صحيح، منطقي، فئة معينة ، إلخ).
- رتبة المصفوفة .
- مدى المصفوفة (نطاق مؤشراتها). (في العديد من لغات البرمجة، يكون مؤشر البداية للمصفوفات ثابتًا عند الصفر أو الواحد، ولكن يتم تحديد مؤشر النهاية عند (إعادة) تخصيص المصفوفة.)
- بالنسبة للمصفوفات التي قد يتغير فيها النطاق المستخدم في وقت معين، يمكن تخزين كل من النطاق الأقصى والنطاق الحالي.
- خطوة المصفوفة ، أو مقدار الذاكرة التي يشغلها كل عنصر من عناصر المصفوفة.
يمكن للبرنامج بعد ذلك الإشارة إلى المصفوفة (أو أي كائن آخر يستخدم متجه البيانات) بالرجوع إلى متجه البيانات. عادةً ما تتم هذه العملية تلقائيًا في لغات البرمجة عالية المستوى . يتطلب الوصول إلى عنصر من عناصر المصفوفة تكلفة إضافية طفيفة (عادةً تعليمة واحدة، والتي تجلب مؤشر البيانات الفعلية من متجه البيانات). من ناحية أخرى، تُصبح العديد من العمليات الشائعة الأخرى أسهل و/أو أسرع.
- بدون متجه بيانات، يستحيل تحديد عدد عناصر المصفوفة. لذا، من الشائع إضافة عنصر إضافي في نهاية المصفوفة، بقيمة "محجوزة" (مثل NULL). يمكن بعد ذلك تحديد الطول من خلال مسح المصفوفة للأمام، وحساب العناصر حتى الوصول إلى "علامة النهاية". بالطبع، هذا يجعل التحقق من الطول أبطأ بكثير من البحث عن الطول مباشرةً في متجه البيانات.
- بدون معرفة حجم المصفوفة، لا يمكن تحرير الذاكرة ( إلغاء تخصيصها) عند انتهاء الحاجة إليها. لذا، وبدون استخدام متجهات التخصيص، يجب تخزين هذا الحجم في مكان آخر. على سبيل المثال، عند طلب تخصيص مساحة لمصفوفة بحجم 3200 بايت من نظام تشغيل معين، قد يقوم النظام بتخصيص 3204 بايت في الموقع M؛ ثم يخزن الحجم في أول 4 بايت، ويُعلم البرنامج الطالب بأن المساحة المخصصة تبدأ من M+4 (حتى لا يعتبر البرنامج المُستدعي البايتات الأربعة الإضافية جزءًا من المصفوفة نفسها). لا تُعتبر هذه البيانات الإضافية متجه تخصيص، ولكنها تُحقق بعض الأهداف نفسها.
- بدون استخدام متجهات البيانات، يجب الاحتفاظ بمعلومات إضافية حول خطوة (أو عرض) عناصر المصفوفة. في لغة C ، يتولى المترجم معالجة هذه المعلومات، حيث يجب عليه التمييز بين نوعي البيانات: "مؤشر إلى مصفوفة من عناصر عرضها 20 بايت" و"مؤشر إلى مصفوفة من عناصر عرضها 1000 بايت". هذا يعني أنه يمكن زيادة أو إنقاص قيمة المؤشر إلى عنصر في أي من نوعي المصفوفات للوصول إلى العنصر التالي أو السابق؛ ولكنه يعني أيضًا أنه يجب تحديد عرض المصفوفة مسبقًا.
حتى مع وجود متجه بيانات، فإن امتلاك مؤشر (فقط) إلى عنصر معين في مصفوفة لا يُمكّن من تحديد موقعه في المصفوفة، أو موقع المصفوفة نفسها، أو موقع متجه البيانات. إذا رُغب في ذلك، يُمكن إضافة هذه المعلومات إلى كل عنصر داخل المصفوفة. قد تكون هذه المعلومات الخاصة بكل عنصر مفيدة، لكنها ليست جزءًا من متجه البيانات.
يمكن أن تكون متجهات Dope ميزة عامة، مشتركة بين أنواع بيانات متعددة (ليس فقط المصفوفات و/أو السلاسل النصية). [ 2 ]
انظر أيضاً
مراجع
- ↑ برات، ت.؛ زيلكوفيتز، م. (1996). لغات البرمجة: التصميم والتنفيذ (الطبعة الثالثة ). أبر سادل ريفر، نيوجيرسي : برنتيس هول . ص 114. ISBN 978-0-13-678012-0.
- ↑ كلايبروك، بيلي ج. (13-15 أكتوبر 1976). تصميم بنية نموذجية لمرفق تعريف بنية بيانات معممة . المؤتمر الدولي الثاني لهندسة البرمجيات ICSE '76. سان فرانسيسكو، كاليفورنيا، الولايات المتحدة الأمريكية: مطبعة جمعية مهندسي الكهرباء والإلكترونيات. الصفحات 408-413 .
- المصفوفات
- نماذج أولية لبرمجة الحاسوب
