حساب فهرس المصفوفة وإزاحة البايت بترتيب الصفوف
في مصفوفة أبعادها 3×4×5 وعناصرها بحجم 8 بايت، يقابل الموضع 1 و2 و3 العنصر رقم 33، بإزاحة 264 بايت وعنوان 4360 انطلاقًا من القاعدة 4096. تظهر كل خطوة وسيطة لتتحقق من حساب المؤشرات أو تفحص مخزنًا مسطحًا. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- الأبعاد
- 3, 4, 5
- الفهارس
- 1, 2, 3
- حجم العنصر (بايت)
- 8
- العنوان الأساسي
- 4,096
- الترتيب
- row-major
- الخطوات (strides)
- 20, 5, 1
- المساهمات
- 20, 10, 3
- الفهرس الخطي
- 33
تحوّل هذه الحاسبة إحداثيات المصفوفة متعددة الأبعاد إلى الموضع الخطي الوحيد المستخدم في تخطيط الذاكرة المتجاور بترتيب الصفوف وفق أسلوب C. أدخل الأبعاد من المحور الخارجي إلى الداخلي، وفهرساً يبدأ من الصفر لكل محور، وحجم العنصر بالبايت، وعنوان أساس اختياري. تعرض النتيجة خطوة كل محور، ومساهمة كل فهرس، وإزاحة العنصر، وإزاحة البايت، وعنوان البايت النهائي، مما يساعدكم على مراجعة حساب المؤشرات والمخازن المؤقتة المسطحة.
أدخلوا الأبعاد والفهارس بترتيب المحاور نفسه
رتّبوا أحجام الأبعاد من المحور الأبعد إلى المحور الأعمق، كما تظهر تماماً في تعريف المصفوفة أو شكلها. إذا كانت المصفوفة مكوّنة من 3 مستويات و4 صفوف و5 أعمدة، فأدخلوا 3 و4 و5. بعد ذلك أدخلوا فهرساً يبدأ من الصفر لكل بُعد وبالترتيب نفسه.
وعليه تكون إحداثيات المستوى الثاني والصف الثالث والعمود الرابع هي 1 و2 و3. يجب أن يكون كل حجم بُعد عدداً صحيحاً موجباً، وأن يكون كل فهرس صفراً أو أكبر وأصغر حصراً من البُعد المقابل. ترفض الحاسبة اختلاف عدد الأبعاد والإحداثيات الخارجة عن الحدود بدلاً من إنشاء عنوان خارج المصفوفة من دون تنبيه.
يلزم أيضاً حجم العنصر لأن فهرس العنصر وحده لا يحدد موقعاً بالبايت. استخدموا عرض التخزين الفعلي، مثل أربعة بايتات لعدد صحيح شائع من 32 بت أو ثمانية لنوع double. إذا كان موضع بداية المصفوفة معلوماً، فأدخلوا عنوان الأساس غير السالب؛ وإلا فاتركوه صفراً واقرؤوا النتيجة بوصفها إزاحة نسبية من بداية المصفوفة.
افهموا حساب الخطوات في ترتيب الصفوف
في ترتيب الصفوف يُخزّن المحور الأخير بصورة متجاورة، ولذلك فإن الانتقال موضعاً واحداً عليه يقدّم عنصراً واحداً بالضبط، فتكون خطوته 1. أما خطوة كل محور سابق فهي حاصل ضرب جميع الأبعاد الواقعة إلى يمينه. مع الأبعاد 3 في 4 في 5 تكون الخطوات 20 و5 و1: فالانتقال مستوى واحداً يتجاوز أربعة صفوف في كل منها خمسة عناصر، والانتقال صفاً يتجاوز خمسة عناصر، والانتقال عموداً يتجاوز عنصراً واحداً.
تضرب الحاسبة كل فهرس في خطوة محوره وتعرض النواتج بوصفها مساهمات. ينتج الفهرس الخطي الذي يبدأ من الصفر بجمع هذه المساهمات. للإحداثيات 1 و2 و3 تكون العملية 1 في 20، زائد 2 في 5، زائد 3 في 1، فتساوي 33.
تجعل القيم الوسيطة النتيجة قابلة للمراجعة وتكشف أخطاء شائعة مثل عكس الأبعاد أو استعمال معاملات ترتيب الأعمدة. تستخدم جميع العمليات أعداداً صحيحة متحققاً منها؛ فإذا تجاوز ضرب أو جمع مجال الأعداد الصحيحة الآمنة في JavaScript، تُعاد رسالة إدخال بدلاً من عنوان جرى تقريبه.
حوّلوا فهرس العنصر إلى عنوان بالبايت
يعدّ الفهرس الخطي العناصر لا البايتات. للحصول على إزاحة البايت، اضربوا الفهرس الخطي في حجم العنصر. يبدأ العنصر ذو الفهرس 33، عندما يكون حجم العنصر ثمانية بايتات، بعد 264 بايتاً من بداية المصفوفة.
ويكون العنوان النهائي مجموع هذه الإزاحة وعنوان الأساس المدخل؛ فإذا كان الأساس 4096 بدأ العنصر عند العنوان 4360. تفصل الاستجابة بين الفهرس الخطي وإزاحة البايت وعنوان الأساس والعنوان النهائي، حتى تتمكنوا من مقارنة كل مرحلة مع الشفرة المصدرية أو مصحح الأخطاء أو مواصفة تنسيق ثنائي أو حساب مخزن GPU. يُعاد العنوان عدداً صحيحاً عشرياً دقيقاً ضمن المجال الآمن، ولا تصل الأداة إلى الذاكرة ولا تفحص عملية قيد التشغيل.
يفترض الحساب مصفوفة كثيفة ومتجاورة بلا حشو بين العناصر أو الصفوف. أما الصفوف ذات pitch، أو الأبعاد الرئيسية الصريحة، أو العروض المقتطعة، أو الخطوات المخصصة، فتحتاج إلى قيم خطواتها الفعلية.
حالات الاستخدام
مراجعة حساب المؤشرات
تحققوا من إزاحات العناصر والبايتات المستخدمة في C وC++ وRust وWebAssembly قبل الوصول إلى مخزن مؤقت مسطح.
تصحيح تسطيح الموترات
قارنوا خطوات ترتيب الصفوف ومساهماته المتوقعة مع مكتبة موترات أو أداة تسلسل أو إجراء لتبادل البيانات.
شرح تخطيط الذاكرة
بيّنوا كيف يساهم كل إحداثي متعدد الأبعاد في موضع متجاور وفي عنوانه النهائي.
الأسئلة الشائعة
هل تبدأ الفهارس من الصفر؟
نعم. يبدأ كل فهرس من الصفر ويجب أن يكون أصغر من حجم البُعد المقابل.
ما المقصود بترتيب الصفوف؟
هو تخطيط متجاور يتغير فيه المحور الأخير للمصفوفة بأسرع وتيرة، كما في مصفوفات C القياسية متعددة الأبعاد.
أي عنوان أساس ينبغي استخدامه؟
استخدموا عنوان البايت الذي تبدأ عنده المصفوفة. اتركوه صفراً إذا كنتم تحتاجون إلى إزاحة نسبية من البداية فقط.
هل تدعم الحاسبة ترتيب الأعمدة؟
لا. ينفّذ الحساب ترتيب الصفوف عمداً، بينما يستخدم تخزين الأعمدة تسلسلاً مختلفاً للخطوات.
هل تراعي حشو الصفوف أو الخطوات المخصصة؟
لا. تفترض عناصر كثيفة ومتجاورة. يحتاج التخزين المزود بـpitch أو الحشو أو النقل أو الاقتطاع إلى الخطوات المادية الفعلية.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/array-rowmajor-index \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"dimensions":[3,4,5],"indices":[1,2,3],"element_size_bytes":8}'const res = await fetch("https://api.kit.forhosting.com/dev/array-rowmajor-index", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"dimensions": [
3,
4,
5
],
"indices": [
1,
2,
3
],
"element_size_bytes": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/array-rowmajor-index",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"dimensions": [
3,
4,
5
],
"indices": [
1,
2,
3
],
"element_size_bytes": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/array-rowmajor-index", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"dimensions":[3,4,5],"indices":[1,2,3],"element_size_bytes":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"dimensions":[3,4,5],"indices":[1,2,3],"element_size_bytes":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/array-rowmajor-index", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"dimensions": [
3,
4,
5
],
"indices": [
1,
2,
3
],
"element_size_bytes": 8
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.array_rowmajor_index",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_dimensions | 32 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
حوّلوا فهرس العنصر إلى عنوان بالبايت
تبلغ كلفة كل طلب API $0.002، ويمكن تنفيذ الحساب الحتمي نفسه في المتصفح للمراجعة السريعة.
أسئلة تقنية
ما كلفة الاستخدام عبر API؟
تبلغ كلفة كل طلب $0.002. تنفّذ نسخة المتصفح الحساب الحتمي نفسه محلياً.