Объявления регистра игнорируются компилятором? - PullRequest
0 голосов
/ 15 марта 2012

При использовании простого C в разработке для iPhone, компилятор помещает переменные, объявленные как register, в регистр ЦП?

Ответы [ 3 ]

4 голосов
/ 15 марта 2012

Единственный способ узнать наверняка - это посмотреть документацию для компилятора, и если это не описывает, что делает register, то он может сделать все что угодно (в пределах параметров, определенных стандартом).

1 голос
/ 15 марта 2012

register является лишь рекомендательной подсказкой для компилятора; Это не гарантирует, что переменная действительно будет помещена в регистр.

Если резервные регистры недоступны, переменная все равно будет в стеке.

0 голосов
/ 15 марта 2012

Ключевое слово register не относится к аппаратным регистрам ЦП.Этого не может быть, поскольку вы можете объявить любой тип переменной register, а также те типы, которые никогда не вписываются в аппаратный регистр.

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

...