لینک کوتاه مطلب : https://hsgar.com/?p=4469

چگونگی آدرس دهی حافظه در زبان سی

داشتم آموزش SDL که یک کتابخانه گرافیکی برای زبان سی است بررسی می‌کردم که به عبارت زیر برخوردم:

define SDL_INIT_TIMER 0x00000001u

این عبارت یک ماکرو به نام SDL_INIT_TIMER تایمر تعریف کرده است که مقدار آن برابر یک آدرس از حافظه برابر 0x00000001u است. حالا من مشکل داشتم این عدد معناش چی است. می‌دانم که این عدد بیانگر یک قسمت از حافظه است اما اینکه دقیقا چی است هنوز خوب نمی‌دانم ولی آنچه می‌دانم اینجا می‌نگارم.

حافظه در کامپیوتر به صورت واقعی آدرس ۰ و ۱ دارد. یک عالمه ۰ و ۱ نوشته می‌شود تا مشخص بشود برای مثال فلان قطعه از حافظه چه آدرسی دارد. هر حافظه کامپیوتر به چیزهایی قطعه بندی می‌شود که بایت نام دارد. هر بایت شامل هشت بیت است و هر بیت یا ۰ است یا ۱ که ۰ بیانگر ولتاژ ۰ و ۱ بیانگر ولتاژ +۵ است. البته این برای ذخیره داده استفاده می‌شود، اما برای آدرس‌دهی نیز از این مفهوم ۰ و ۱ استفاده شده است.

آدرس اولین قطعه هشت بیتی برابر ۰۰۰۰۰۰۰۱ است. یعنی ۱ ضرب‌در ۲ به توان ۰. برای اینکه بدانید اعداد دودویی چطور کار می‌کنند این مقاله ویکی‌پدیا را مطالعه کنید. حالا برای اینکه کار کمی آسانتر بشود می‌توانستند از اعداد دهدهی استفاده کنند همین اعداد ۱ و ۲ و ۳ و … اما این کار باعث می‌شود تا شاهد رقم‌های بسیارهای طولانی باشیم. پس آمدند چه کار کردند گفتند به جای اینکه از سیستم دهدهدی استفاده کنیم می‌آییم از سیستم ۱۶ تایی استفاده می‌کنیم. به این صورت که اعداد ۰ تا ۹ در سیستم ۱۶ تایی بیانگر خود اعداد ۰ تا ۹ در سیستم دهدهی باشند و حروف A تا F بیانگر اعداد ۱۰ تا ۱۵ باشند به این صورت خوانش آدرس برای انسان آسانتر می‌شود. این عکس پایین که از ویکی‌پدیا برداشتم خیلی به فهم این سیستم کمک می‌کند.

در یک سیستم دودویی:

۱۲۴۸۱۶۳۲۶۴۱۲۸

در یک سیستم ۱۶ تایی

۱۱۶۲۵۶۴۰۹۶….

جدول زیر می‌تواند مفید باشد:

بیس ۱۰باینریهگزادیسمال
0000000000
1000000011
2000000102
3000000113
….….….
1400001110E
1500001111F

خوب، پس حالا که فهمیدیم آدرس دهی در کامپیوتر به چه صورت است، برگردیم به سراغ مسئله خودمان و اندیشه کنیم که 0x00000001u به چه معنا است. 0x به این معنا است که آدرس یک آدرس هگزادیسمال است، اما این u در آخر چی است. این را خودم نمی‌دانم اما به گمانم بیانگر این است که سگمنت یا قسمت خاصی از حافظه اشاره دارد شاید به ثبات خاصی اشاره کند ولی مطمئنا ربطی در مقدار آدرس حافظه ندارد پس می‌ماند 00000001 این هشت رقم است که مطمئنا به معنای ۱ است. اما چرا به صورت دودویی نوشته شده است و نه به صورت هگزادیسمال را نمی‌دانم.

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.