Рэгістрацыя класа захоўвання ў праграмаванні на C  


Гэта таксама выкарыстоўваецца для лакальных зменных, але выкарыстоўваецца, калі патрабуецца больш хуткі доступ. Гэты тып зменнай захоўваецца ў рэгістрах працэсара, а не ў аператыўнай памяці. Такім чынам, гэтым зменным не будзе прызначаны адрас памяці, і, такім чынам, мы не можам атрымаць доступ да гэтых зменных, выкарыстоўваючы аператар адрасоў '&'. Але гэтая зменная дзейнічае як любая іншая лакальная зменная альбо аўтаматычная. Ключавое слова 'register' выкарыстоўваецца перад аб'явай зменнай, каб паказаць, што гэта зменная register. Нягледзячы на ​​тое, што мы аб'яўляем іх як зменную рэгістру, яе не трэба захоўваць у рэгістрах. ЦП будзе мець вельмі абмежаваную колькасць рэгістраў, і калі яны заняты іншымі задачамі, і калі рэгістраў няма, яны захоўваюцца як аўтаматычная зменная. Гэта азначае, што ён будзе захоўвацца ў памяці.

Асноўная перавага захоўвання зменнай як рэгістрацыі заключаецца ў тым, што яны захоўваюцца ў памяці працэсара, доступ да якой адбываецца вельмі хутка ў параўнанні з аператыўнай памяццю. Гэта робіць праграму хутчэй выкананай. Такім чынам, гэты тып зменных у асноўным выкарыстоўваецца там, дзе патрабуецца хуткі доступ да іх. Напрыклад, індэксы завес, падчас вылічэння і доступу да лічыльнікаў і г.д.

Паколькі аператар "&" нельга выкарыстоўваць з гэтымі тыпамі зменных, мы не можам выкарыстоўваць тып рэгіструючых зменных для масіваў. Гэта таму, што сам масіў дзейнічае як паказальнік на адрас памяці і яго элементы, якія трэба захоўваць у сумежных месцах памяці. Але ў рэгістрах не будзе выдзелена памяці, таму яе нельга выкарыстоўваць для масіваў.

Глядзіце таксама
Аўтаматычны клас захоўвання ў праграмаванні на C

Рэгістры таксама з'яўляюцца лакальнымі зменнымі, і, такім чынам, іх вобласць існуе толькі ў межах блока альбо функцыі, у якой ён вызначаны. Як і аўтаматычны, ён будзе мець значэнне смецця, пакуль не будзе ініцыялізаваны. Такім чынам, мы не зможам атрымаць доступ да гэтай зменнай, пакуль мы яе не ініцыялізуем.

#include 

void main(){
	register int intNum;

	printf("\nValue at intNum before initializing is %d ", intNum);// shows compilation error that intNum is not initialized

	intNum = 100;
	printf("\nValue at intNum after initializing is %d ", intNum);
}