Ключевое слово register можно использовать для указания компилятору, что он использует регистры для итератора и количество итераций:
register float i;
register int numIterations = ITERATIONS;
, ноэто не сильно поможет.Прежде всего, компилятор может или не может использовать ваше предложение.Далее, значения все еще должны быть помещены в стек для вызова fib () , и, наконец, в зависимости от того, какие функции вы вызываете в вашем цикле, код в процедуре, вызываемой процедурой, может сохранить ваш регистрсодержимое в стеке фрейма при входе в процедуру и восстановите их как часть кода, реализующего возвращаемую процедуру.
Если вам действительно нужно подсчитать каждую инструкцию, вам нужно будет написать машинный код (используя сборкуязык).Таким образом, у вас есть прямой контроль над использованием вашего реестра.Программирование на ассемблере не для слабонервных.Развитие языка ассемблера в несколько раз медленнее, чем при использовании языков более высокого уровня, риск вставки ошибок выше, а их гораздо сложнее отследить.Языки высокого уровня были разработаны по причине, и язык C был разработан, чтобы помочь написать Unix.Миникомпьютеры, на которых работали первые системы Unix, были очень медленными, но причина, по которой C использовался вместо сборки, заключалась в том, что даже тогда было важнее иметь код, который занимал меньше времени на кодирование, имел меньше ошибок и был легче отлаживаться, чемассемблер.
Если вы хотите попробовать это, вот ответы на предыдущий вопрос о стековом потоке о ресурсах для программирования на ARM , которые могут быть полезны.
Одна тактика, которую вы можете использоватьсостоит в том, чтобы изолировать ваш критичный к производительности код в процедуре, написать процедуру на C, захват сгенерированного представления на ассемблере.Затем перепишите ассемблер, чтобы он был более эффективным.Тщательно протестируйте и получите хотя бы еще один набор глазных яблок, чтобы просмотреть полученный код.
Удачи!