С++ для начинающих

       

Регистровые автоматические объекты


Автоматические объекты, интенсивно используемые в функции, можно объявить с ключевым словом register, тогда компилятор будет их загружать в машинные регистры. Если же это невозможно, объекты останутся в основной памяти. Индексы массивов и указатели, встречающиеся в циклах, – хорошие кандидаты в регистровые объекты.

for ( register int ix =0; ix < sz; ++-ix ) // ...

for ( register int *p = array ; p < arraySize; ++p ) // ...

Параметры также можно объявлять как регистровые переменные:

bool find( register int *pm, int Val ) {

    while ( *pm )

        if ( *pm++ == Val ) return true;

    return false;

}

Их активное использование может заметно увеличить скорость выполнения функции.

Указание ключевого слова register – только подсказка компилятору. Некоторые компиляторы игнорируют такой запрос, применяя специальные алгоритмы для определения наиболее подходящих кандидатов на размещение в свободных регистрах.

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



Содержание раздела