Что компилируется в более быстрый код: «n * 3» или «n + (n * 2)»? - PullRequest
6 голосов
/ 10 сентября 2008

Что компилируется в более быстрый код: "ans = n * 3" или "ans = n + (n * 2)"?

Предполагая, что n - это либо целое число, либо длинное, и оно работает на современном Win32 Intel Box.

Было бы по-другому, если бы была задействована какая-то разыменование, то есть какая из них была бы быстрее?


long    a;
long    *pn;
long     ans;

...
*pn = some_number;
ans = *pn * 3;

Или

ans = *pn+(*pn*2);

Или вам не о чем беспокоиться, поскольку оптимизирующие компиляторы в любом случае могут объяснить это?

Ответы [ 11 ]

0 голосов
/ 10 сентября 2008

Компиляторы хороши в оптимизации кода, такого как ваш. Любой современный компилятор выдаст одинаковый код для обоих случаев и дополнительно заменит * 2 на левое смещение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...