Рубрики

Понимание ключевого слова «регистрация» в C

Доступ к регистрам быстрее, чем к памяти, поэтому переменные, которые чаще всего используются в программе на Си, могут быть помещены в регистры с помощью ключевого слова register . Ключевое слово register указывает компилятору, что данная переменная может быть помещена в регистр. Выбор компилятора — записать его в регистр или нет. Обычно сами компиляторы выполняют оптимизацию и помещают переменные в регистр.

1) Если вы используете & оператор с регистровой переменной, то компилятор может выдать ошибку или предупреждение (в зависимости от того, какой компилятор вы используете), потому что когда мы говорим, что переменная является регистром, она может быть сохранена в регистре вместо памяти и адрес доступа к регистру недействителен. Попробуйте нижеприведенную программу.

#include<stdio.h>

  

  

int main()

{

    register int i = 10;

    int* a = &i;

    printf("%d", *a);

    getchar();

    return 0;

}

2) ключевое слово register можно использовать с переменными указателя. Очевидно, что регистр может иметь адрес ячейки памяти. Там не было бы никаких проблем с программой ниже.

#include<stdio.h>

  

int main()

{

    int i = 10;

    register int* a = &i;

    printf("%d", *a);

    getchar();

    return 0;

}

3) Register является классом хранения, и C не допускает наличие нескольких спецификаторов класса хранения для переменной. Таким образом, регистр не может быть использован со статическим . Попробуйте нижеприведенную программу.

#include<stdio.h>

  

int main()

{

    int i = 10;

    register static int* a = &i;

    printf("%d", *a);

    getchar();

    return 0;

}

4) Регистр может использоваться только внутри блока (локального), его нельзя использовать в глобальной области видимости (вне основного).

#include <stdio.h>

  
// ошибка (глобальная область)

register int x = 10;

int main()

{

    // работает (внутри блока)

    register int i = 10;

    printf("%d\n", i);

    printf("%d", x);

    return 0;

}

Ошибки компиляции:

prog.c:3:14: error: register name not specified for 'x'
 register int x = 10;//error (global scope)
              ^

5) Нет ограничений на количество переменных регистра в программе на C, но суть в том, что компилятор может поместить некоторые переменные в регистр, а некоторые нет.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное в приведенной выше статье или хотите поделиться дополнительной информацией о ключевом слове в реестре.

Рекомендуемые посты:

Понимание ключевого слова «регистрация» в C

0.00 (0%) 0 votes