Реализация инкремент-операторов в 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, то вы, вероятно, слишком сильно управляете своей производительностью. Большая часть прироста производительности достигается на более высоких уровнях, чем этот, и эффект, который это изменение окажет на вашу программу, будет незначительным во всех случаях, кроме самых крайних.