Реализация инкремент-операторов в Android

Я провел несколько тестов с пре- и постинкрементами, чтобы выяснить, есть ли различия в производительности или энергопотреблении между двумя операторами на Android.

Я не нашел никаких отличий.

основной тезис хорошо объяснен здесь: http://www.roman10.net/pre-increment-and-post-increment/(pre быстрее, потому что temp-var не генерируется).

я узнал это для C++, на этом сайте показана c-реализация, но я не смог понять, как осуществляется реализация в android (может, она иная).

код используется для проверки

int lPlotRangeCtr = 0;
    while (lPlotRangeCtr != mPlotRange){
        int lTMP = ++lPlotRangeCtr;
    }   

как вы можете себе представить, это кусок для предварительного увеличения, аналогичный для пост-работы. я использовал тамп-переменную "lTMP", чтобы убедиться, что возвращаемое значение оператора назначено, а компилятор не преобразовывает оператор приращения.

Кто-нибудь может мне помочь, как найти имплантацию. может ли компилятор по-прежнему преобразовывать оператор, когда он утвержден, что lTMP никогда не читается? такие операторы автоматически удаляются при компиляции?

1 ответ

Решение

Компиляторы могут быть очень умными, и я не удивлюсь, если они оптимизируют переменную прямо сейчас. Я предлагаю вам сделать его глобальной переменной и пометить ее как изменчивую. Это заставляет компилятор писать в него.

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

Другие вопросы по тегам