Я пытаюсь понять, какой смысл применять register
спецификатор аргумента функции. Следующий код действителен:
#include <iostream>
using std::cout;
struct A
{
A(){ cout << "A\n"; }
~A(){ cout << "~A\n"; }
};
void foo(register A a)
{
}
int main()
{
cout << "first line\n";
foo(A());
cout << "last line\n";
}
Почему register
спецификатор применяется к параметру функции?
register
это старое ключевое слово, которое берет свое начало в K&R C. Его целью было дать указание компилятору сохранить переменную как регистр процессора вместо загрузки и выгрузки данных из памяти, которая имела накладные расходы. Когда вы обращаетесь к этой переменной очень часто, одна или две инструкции, которые вы сохранили, когда объявляете ее регистром, были очень ценными в то время.
С тех пор компиляторы стали довольно хорошо оптимизировать ваш код, и это ключевое слово потеряло свою цель. Теперь это игнорируется большинством реализаций, если вы не укажете компилятору использовать его в любом случае.