Размещение переменной в регистре

123
17 октября 2019, 14:20

Register variables

The maximum number of integer register variables is approximately six in 32-bit systems and fourteen in 64-bit systems.The maximum number of floating point register variables is eight in 32-bit systems andsixteen in 64-bit systems. Some compilers have difficulties making floating point register variables in 32-bit systems unless the SSE2 (or later) instruction set is enabled.The compiler will choose the variables that are used most for register variables. This includes pointers and references, which can be stored in integer registers. Typical candidates for register variables are temporary intermediates, loop counters, function parameters, pointers, references, 'this' pointer, common subexpressions, and induction variables (see below).A variable cannot be stored in a register if its address is taken, i.e. if there is a pointer or reference to it. Therefore, you should avoid making any pointer or reference to a variable that could benefit from register storage.

Источник

Не очень понимаю, почему переменная не может быть размещена в регистрах?

Answer 1

Переменная не может быть размещена в регистрах, если вам понадобится её адрес:

register int d;
scanf("%d", &d);

В данном случае функции scanf требуется адрес переменной d, чтобы записать туда введённое пользователем число.

Если переменная размещена в регистре, естественно, у неё нет адреса в оперативной памяти.

P.S. Всё это очень-очень сильно устарело. Современные компиляторы прекрасно размещают локальные переменные в регистрах без дополнительных указаний.

READ ALSO
Вывести wchar_t в ncurses с помощью printw

Вывести wchar_t в ncurses с помощью printw

Вывести в терминал могу так std::wcout << serialNumber << std:: endl; Но мне нужно вывести в ncurses меню там используется printwНа что получаю ошибку main

158
Контейнеры map/set и кэш процессора

Контейнеры map/set и кэш процессора

В книге Артур О'Двайр "Осваиваем C++17 STL"

142
Нет либы для boost::asio

Нет либы для boost::asio

Пути к boost и к либам есть

112
Java selenium не открывается страница google drive

Java selenium не открывается страница google drive

Java selenium не открывается страница google drive

146