هل الخلايا في ذاكرة الحاسب متخصصة ؟

عندما أقوم بحجز متغير ما فإنه يقوم بحجز خلية في الذاكرة هل عندما أحدد نوع المتغير مثلا string يقوم بحجز أي خلية و وضع قيود لها بحيث تدخل القيم النصية فقط إليها أم أن الذاكرة مقسمة إلى أنواع مثلا منها خاص بالنص ومنها خاص بالأرقام وهكذا

أي باختصار هل الخلايا في الذاكرة متخصصة أم أنا الذي أضع لها قيود

أيضا سؤال آخر عندما أقوم بحجز متغير هل يحجز في الذاكرة العشوائية (Ram) أم هناك ذاكرة أخرى

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

في الذاكرة كل شيء يخزن كسلسلة من ال bytes، ويمكنك تخيلها كمصفوفه من الخانات، كل خانه تخزن بايت واحد ، ولا يوجد ما يفرق بين نوع وأخر أي لا وجود لشيء يسمي Type في الذاكرة ،

بمعنى لديك هذا الداتا: 1100 0000 0110 1001 1001 1001 1001 1010

على حسب تفسيرك لها مثلا اذا فسرتها كinteger سوف تحصل على 3228074 واذا فسرتها ك boolean سوف تحصل على true، واذا فسرتها ك floating point سوف تحصل على 3.65.

طبعاً في لغات البرمجة ال Data type هي التي تقوم بعملية التفسير هذه، وكل ما عليك استخدام ال type المناسب ، لذلك ال datatype هي Abstraction (مجرد representation ) لل bits على الذاكرة

بالنسبة لسؤالك الأخر فهناك المسجلات Registers ولا تستطيع التخزين به في ال high level languages بشكل مباشر وهي لل32 بت تكون 4 بايت، ولل64 تكون 8 بايت، وهي في الأخير تخزن بياتات، على العموم ليس كل المسجلات بنفس الحجم فمثلاً Floating Point Registers قد تكون اقل أو أكبر، هذا على حسب المعالج.

ما فهمته أن الذاكرة يخزن بها أرقام فقط مكونة من 1 و 0 والمترجم هو من يقوم بمهمة تحويل البيانات وما فهمته أن هناك عملية في المترجم تقويم بتقييد نوع البيانات وكل ما على الذاكرة أن تخزن مجموعة أرقام مكونة من 1 و 0

بالنسبة لسؤالك الأخر فهناك المسجلات Registers ولا تستطيع التخزين به في ال high level languages بشكل مباشر

لم أفهم هذه النقطة ، هل المسجلات ذاكرة في الحاسب ، وما قصدك بالعبارة "لا تستطيع التخزين به في ال high level languages بشكل مباشر "

نعم كل شيء يخزن هو 0 و 1، ال Interpreation لها هو ما يجعل الرقم رقم والنص نص، ولكن في النهايه كلهم 0 و 1

المعالج لا يتعامل مع الذاكرة RAM بشكل مباشرة وانما يتم جلب القيم والتعليمات ويضعها في المسجلات ويتعامل معها، في لغه الأسمبلي تستطيع التعامل معها مباشرة، بينما في لغات عالية المستوى مثلاً جافا أو سي++ لا يمكنك أن تتعامل مع المسجلات بشكل مباشر، وان كان في السي++ تستطيع اخبار المترجم بأنك تود وضع القيمة في register من خلال reg قبل المتغير ولكن هذا hint فقط ويمكن للمترجم أن يتجاهله

شكرا لك ، اﻷن الصورة واضحة

تقييد المتغيرات هي من مهمة مترجم اللغة

والذاكرة لا دخل لها لأنها بالنسبة للمترجم عبارة عن بايتات

والمترجم هو فقط يحجز عدد من البايتات حسب نوع المتغير