آدرس حافظه

در رایانش، آدرس حافظه یک نوع داده‌ای است که در سطوح مختلفی توسط سخت‌افزار و نرم‌افزار برای دسترسی به انباره اصلی حافظه رایانه استفاده می‌شود. آدرس‌های حافظه رشته‌هایی از ارقام با طول ثابت هستند که مطابق قرارداد نشان داده می‌شوند و با اعداد صحیح بی‌علامت با آن‌ها کار می‌شود. این چنین معناهای شمارش معنایی که خودشان بر اساس ویژگی‌های پردازنده (مانند دستور العمل‌های اشاره‌گر و آدرس ثبات افزایشی) هستند، و همچنین از حافظه مانند آرایه‌ای تایید شده توسط زبان‌های برنامه‌نویسی مختلف استفاده می‌کنند.
انواع آدرس‌های حافظه
انواع مختلفی از آدرس‌های حافظه وجود دارد. به عبارت دیگر یک رایانه و حتی یک برنامه ممکن است فضاهای آدرس حافظه مختلفی داشته باشند.
یک حافظه رایانه دیجیتال ، به‌طور خاص حافظه اصلی، شامل تعدادی مکان حافظه می‌باشد، هر یک با داشتن یک آدرس فیزیکی یا یک کد قابل استفاده برای پردازنده (یا دستگاه‌های دیگر) می‌توانند به آن دسترسی پیدا کنند. در کل فقط نرم افزارهای سیستمی، یعنی بایوس، سیستم عامل، و برخی از برنامه‌های سودمند عمومی (مانند ارزیاب‌های حافظه)، حافظه فیزیکی رابا استفاده از عملوند کد ماشین یا ثبات پردازنده آدرس‌دهی می‌کنند.
دستوردهی پردازنده برای هدایت یک دستگاه سخت افزاری، به نام کنترل گر حافظه، برای استفاده از گذرگاه حافظه یا گذرگاه سیستم یا کنترل جداگانه، آدرس و گذرگاه‌های داده‌ها، برای اجرای دستورهای برنامه به کار می‌رود. هدایت‌گر حافظه گذرگاه شامل تعدادی خطوط موازی است که هر کدام با یک عدد دودویی نشان داده می‌شوند. عرض گذرگاه و به این ترتیب تعدادی از واحدهای ذخیره‌سازی آدرس و تعداد بیت در هر واحد در میان رایانه‌های مختلف متفاوت است.
واحد وضوح آدرس
بیشتر رایانه‌های امروزی آدرس پذیر بایتی هستند یعنی هر آدرس یک تک بایت ۸ بیتی از انباره را مشخص می‌کند. داده‌های بیش از حد بزرگ که در یک بایت ذخیره می‌شود ممکن است چند بایت را اشغال کنند و در دنباله‌ای از آدرس‌های متوالی را قرار بگیرد . رایانه‌های آدرس پذیر کلمه‌ای وجود دارد که در آن حداقل واحد ذخیره‌سازی آدرس پذیر دقیقا کلمه پردازنده است. به عنوان مثال در رایانه کوچک اطلاعات عمومی Nova و تگزاس اینسترومنتز TMS9900 و ریزرایانه‌های ملی نیمه هادی IMP-16 استفاده می‌شود از کلمات ۱۶ بیتی استفاده می‌شود. بسیاری از رایانه‌های بزرگ ۳۶ بیتی (مانند PDP-10) که نه از آدرس‌دهی بایتی بلکه از آدرس‌دهی کلمه ۱۸ بیتی استفاده می‌کنند که یک فضای آدرس ۲ ۱۸ ، ۳۶ بیت کلمه‌ای (حدود یک مگابایت از انباره) می‌دهد. بهره وری از آدرس‌دهی حافظه بستگی به اندازه بیت در گذرگاه استفاده شده برای آدرس‌ها - بیت استفاده شده بیشتر آدرس‌های در دسترس بیشتری را برای رایانه به همراه دارد. برای مثال، یک دستگاه 8 بیتی آدرس‌پذیر بایتی با گذرگاه آدرس ۲۰ بیتی (به عنوان مثال اینتل ۸۰۸۶) می‌تواند ۲ ۲۰ (۱۰۴۸۵۷۶) محل حافظه یا یک مگابایت از حافظه را آدرس دهی کند، در حالی که یک گذرگاه ۳۲ بیتی (به عنوان مثال اینتل ۸۰۳۸۶) می‌تواند ۲ ۳۲ (۴۲۹۴۹۶۷۲۹۶) مکان یا ۴ گیگابایت فضای آدرس داشته باشد. در مقابل یک ماشین آدرس پذیر کلمه‌ای ۳۶بیتی با یک گذرگاه آدرس ۱۸بیتی تنها ۲ ۱۸ (۲۶۲۱۴۴) مکان ۳۶ بیتی (۹۴۳۷۱۸۴ بیت) برابر با ۱۱۷۹۶۴۸ بایت 8 بیتی یا ۱۱۵۲ کیلوبایت، یا ۱/۱۵۲ مگابایت یعنی کمی بیش از ۸۰۸۶ را آدرس‌دهی می‌کند.
اندازه کلمه در مقابل اندازه آدرس
اندازه کلمه یک ویژگی است که به یک معماری رایانه داده می‌شود. این نشان دهنده تعداد ارقامی است که یک پردازشگر مرکزی می‌تواند در یک زمان پردازش کند. پردازشگر‌های نوین، از جمله سامانه‌های نهفته، معمولا کلمه‌ای با اندازه‌های ۸، ۱۶، ۲۴، ۳۲ یا ۶۴ بیت دارند. بیشتر رایانه‌های با مصارف عمومی در حال حاضر از پردازشگرهای ۳۲ بیت یا ۶۴ بیتی استفاده می‌کنند. در طول تاریخ بسیاری از اندازه‌های مختلف از جمله ۸، ۹، ۱۰، ۱۲، ۱۸، ۲۴، ۳۶، ۳۹، ۴۰، ۴۸، و ۶۰ بیت استفاده شده‌است.
محتویات هر محل حافظه
هر محل حافظه در یک برنامه ذخیره شده رایانه به نوعی یک عدد دودویی یا عدد دهدهی را نگه می‌دارد.
فضای آدرس در برنامه‌نویسی
در محیط‌های چندکارگی امروزی، فرآیند یک نرم‌افزار کاربردی معمولا در فضای آدرس خودش تکه‌های حافظه از انواع زیر را دارد:
زبان ماشین ، از جمله:
کد خود برنامه(در گذشته به عنوان بخش کد و بخش متن شناخته می‌شده)
کتابخانه‌های اشتراکی
داده‌ها، از جمله:
داده‌های مقداردهی اولیه (بخش داده)
متغیر مقدار دهی نشده (اما اختصاص داده شده)
پشته فراخوانی
مدیریت حافظه
حافظه مشترک و حافظه فایل‌های نگاشت شده
برخی از بخش‌های فضای آدرس ممکن است در به جایی نگاشت نشوند.
شمای آدرس دهی
یک رایانه می‌تواند به آدرس داده شده به صراحت دسترسی داشته باشد (در برنامه‌نویسی سطح پایین که معمولا آدرس‌دهی مطلق یا گاهی اوقات آدرس‌دهی خاص نامیده می‌شود و به عنوان نوع داده اشاره‌گر در زبان‌های سطح بالا شناخته می‌شود). با این حال یک برنامه می‌تواند از آدرس‌دهی نسبی استفاده کند که یک مکان را در ارتباط با جایی دیگر (پایه آدرس‌دهی) مشخص می‌کند. حالات آدرس‌دهی غیر مستقیم بسیاری وجود دارد .
نگاشت آدرس‌های منطقی به حافظه فیزیکی و مجازی، چند سطح غیر مستقیم را می‌افزاید، پایین را ببینید.
انواع حافظه
بسیاری از برنامه نویسان ترجیح می‌دهند طوری حافظه را آدرس دهی کنند که هیچ تمایزی بین فضای کد و فضای داده (رجوع کنید به بالا)، و همچنین بین حافظه فیزیکی و مجازی (پایین را ببینید) وجود نداشته باشد. به عبارت دیگر، اشاره‌گرهای عددی یکسان دقیقا به همان بایت مشابه از حافظه دسترسی تصادفی اشاره می‌کند.
انواع حافظه در معماری x86
کامپیوترهای x86 اولیه بر اساس ترکیبی از دو عدد از آدرس‌های نوع حافظه قطعه بندی شده استفاده می‌کردند: بخش حافظه و حاشیه که در آن قطعه است.