C ++ - константа и оптимизация - PullRequest
2 голосов
/ 13 октября 2011

Я оптимизирую некоторые горячие точки в моем приложении, и компиляция выполняется с использованием gcc-arm.

. Есть ли вероятность, что следующие операторы приведут к другому коду ассемблера:

static const pixel_t roundedwhite = 4294572537U;
return (packed >= roundedwhite) ? purewhite : packed;

// OR
const pixel_t roundedwhite = 4294572537U;
return (packed >= roundedwhite) ? purewhite : packed;

// OR
return (packed >= 4294572537U) ? purewhite : packed;

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

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

Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

Позвоните gcc с флагом -S и посмотрите на сборку:

-S

Остановиться после этапа компиляции; не собирать. Выходные данные представлены в виде файла кода ассемблера для каждого указанного входного файла не на ассемблере.

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

1 голос
/ 13 октября 2011

Разница, конечно, в том, что первая версия, с static, будет использовать некоторую память, даже если это значение будет встроено в выражение.Это имело бы смысл, если вы хотите вычислить более сложное выражение один раз, а затем сохранить результат, но для этой простой константы статика не нужна.Тем не менее, компилятор, скорее всего, будет указывать значение, так как это очень простая оптимизация, и для этого нет причин не делать этого.

...