Скажем, я хочу использовать функцию для измерения времени выполнения, я хочу избежать того, чтобы компилятор оптимизировал удаление выражений только потому, что он думает, что они ничего не делают (они этого не делают, за исключением того, что я хочу измерить, сколько времени они занимают для вычисления).Вместо того, чтобы делать странные уловки, такие как добавление их в другую переменную и т. Д., Я узнал о __atribute__((optimize(0)))
в GCC.Однако, скажем, у меня есть этот код:
__attribute__((optimize(0))) void test(int n) {
while (n--) {
foo();
}
}
int main() {
std::cout << Timer::measure(test).count() << "ms\n";
}
Может ли атрибут помешать компилятору оптимизировать код внутри функции foo ()?На самом деле я просто пытаюсь протестировать некоторое время выполнения и надежно и относительно легко предотвратить компилятор от полного удаления кода (я хочу, чтобы он оптимизировал код настолько хорошо, насколько это возможно, но не удалял его, потому что он ничего не делает!).
Имеет ли это какой-то смысл?Заранее спасибо!