کارش این بود که به کامپایلر میگفت این متغیر قراره تو برنامه خیلی استفاده بشه، پس جای اینکه تو رم ذخیرهاش کنی، مستقیم ببرش تو رجیستر خود پردازنده تا سرعت خوندن و نوشتنش به شدت بره بالا.
مثلا برای یه متغیر شمارنده حلقه:
int main() {
register int i = 0;
while (i < 1000) {
i++;
}
}استفاده ازش یه سری قوانین سفت و سخت داره. مثلا نمیتونید آدرس این متغیر رو با علامت & بگیرید، چون اصلا تو مموری نیست که آدرس داشته باشه. یا اینکه متغیرهای گلوبال و استاتیک نمیتونن رجیستر بشن و حتما باید لوکال (داخل تابع) باشن.
اما قسمت جالب و معماری قضیه اینجاست: تو کامپایلرهای مدرن امروزی این کلیدواژه عملا فقط یه پیشنهاده و کامپایلر میتونه کلا نادیدهاش بگیره. کامپایلرهای امروزی انقدر هوشمند شدن که حتی اگه شما register رو ننویسید، خودشون با آنالیز کد تشخیص میدن کدوم متغیر تو رجیستر باشه بهتره. در واقع الان کامپایلرها خیلی بهتر از خود برنامه نویس میتونن منابع پردازنده رو مدیریت کنن.
دونستن این کلیدواژه شاید الان تو کدنویسی روزمره کاربرد نداشته باشه، اما درک خیلی خوبی از تفاوت سرعت حافظه و پردازنده میده و نشون میده کامپایلرها تو این سالها چقدر پیشرفت کردن. تو رفرنسهای اصلی مثل کتاب K&R هم بهش برمیخورید.
#c
@CleverDevs - @CleverDevsGp




