Internship at OpenGenus

Get this volume -> Problems on Assortment: For Interviews and Competitive Programming

Reading time: twenty minutes | Coding time: 5 minutes

Register is a keyword in C which suggests the system to employ register as a retentiveness for a variable instead of RAM. This accelerates the reading and writing of memory and enhances the overall operation. Note that using register does not gaurentee the use of system registers.

The fourth dimension of retention access is every bit follows:

registers < cache < principal memory (default) < secondary memory

Syntax:

              register <datatype> <variable_name>;                          

Example:

              register int data;                          

Consummate example:

              #include <stdio.h>  int main()  { 	for(register int i = 1; i <= 5; i++) 		printf("%d", i); 	return 0; }                          

Output:

              12345                          

Currently, almost comiplers are optimized then that it is able to decide automatically which variable if stored in register will result in performance improvement.

Note that register is a reserved but unused keyword in C++. This is considering C++ designers considered that compilers volition exist mature plenty to tune this parameter meliorate than developers in well-nigh cases.

Some key points regarding register in C:

  • register only suggests using register memory
  • We cannot get the memory location of such a variable
  • We can get the size using sizeof()

Memory location

If we take alleged a variable equally a register, nosotros cannot become the memory location.

Normal manner of getting memory location of a variable is using the & operator like:

              printf("%p", &i);                          

Complete example:

              #include <stdio.h>  int main()  {     int i = 0;     printf("%p", &i); 	return 0; }                          

Output:

              0x7fff3d4f4934                          

If i, the variable is alleged equally a annals, it will give compile time error. For case:

              #include <stdio.h>  int master()  {     register int i = 0;     printf("%p", &i); 	render 0; }                          

Compile time error:

              opengenus.c: In function 'main': opengenus.c:half dozen:5: fault: address of register variable 'i' requested      printf("%p", &i);      ^                          

sizeof() of annals variable

We can get the size of a register variable using sizeof() just like a normal variable similar:

              printf("%lu", sizeof(i));                          

Complete C lawmaking example:

              #include <stdio.h>  int main()  {     int i = 0;     printf("%lu", sizeof(i)); 	return 0; }                          

Output:

              four                          

Comparison performance

Consider this lawmaking where nosotros are considering registers and executing a loop:

              #include <stdio.h> #include <fourth dimension.h> #define limit 10000000  int main()  {     clock_t start = clock();     register int j = 0; 	for(annals int i = 1; i <= limit; i++) 	{ 	    j = i * 2 - one; 	    j = j * j; 	    j = i; 	} 	clock_t end = clock();     printf("%ld", (long)(end-kickoff)); 	return 0; }                          

Output:

              ii                          

Information technology takes only two clock cycles. It uses registers.

If nosotros avoid using registers, information technology volition increase the time greatly. Consider this example:

              #include <stdio.h> #include <fourth dimension.h> #ascertain limit 1000000  int main()  {     clock_t get-go = clock();     int j = 0; 	for(int i = 1; i <= limit; i++) 	{ 	    j = i * 2 - one; 	    j = j * j; 	    j = i; 	} 	clock_t terminate = clock();     printf("%ld", (long)(cease-start)); 	return 0; }                          

Output:

              2714                          

Hence, we come across that the execution time is significantly more when not using registers. Hence, in C programming, information technology is advised to use register for variables that will be used frequently.

Annotation that declaring register for all variables may not assist every bit the system may not have so many registers available for utilise.