Заставить gcc не включать функцию - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь остановить gcc от встраивания функции следующим образом:

template <typename T, precision P> __attribute__ ((noinline))
void func () {}

Но она по-прежнему встроена в функцию.

Есть ли способ заставить ее?

Привет

Ответы [ 2 ]

0 голосов
/ 23 января 2019

__attribute__((noipa)) отключает больше оптимизаций, чем просто встраивание. В частности, он также отключает оптимизацию, которая замечает, что функция является чистой (и, следовательно, вызовы могут быть удалены, если только не будет возвращено значение). В документации для __attribute__((noinline)) явно упоминаются пустые функции и необходимость добавить, например, asm("");, чтобы они не были оптимизированы.

0 голосов
/ 22 января 2019

Заставьте gcc поверить, что у этой функции есть побочные эффекты:

template <typename T, precision P> __attribute__ ((noinline))
void func () {
    asm volatile("");
}

демо

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