Спецификатор регистра, появляющийся в аргументе функции

Я пытаюсь понять, какой смысл применять 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 спецификатор применяется к параметру функции?

0

Решение

register это старое ключевое слово, которое берет свое начало в K&R C. Его целью было дать указание компилятору сохранить переменную как регистр процессора вместо загрузки и выгрузки данных из памяти, которая имела накладные расходы. Когда вы обращаетесь к этой переменной очень часто, одна или две инструкции, которые вы сохранили, когда объявляете ее регистром, были очень ценными в то время.

С тех пор компиляторы стали довольно хорошо оптимизировать ваш код, и это ключевое слово потеряло свою цель. Теперь это игнорируется большинством реализаций, если вы не укажете компилятору использовать его в любом случае.

2

Другие решения


По вопросам рекламы [email protected]