Как заставить оптимизатор рассматривать локальную функцию как черную коробку и не оптимизировать на основе ее реализацииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как заставить оптимизатор рассматривать локальную функцию как черную коробку и не оптимизировать на основе ее реализации

Сообщение Anonymous »

i думал , что атрибут функции noinline заставит компилятор рассматривать локальную функцию как черную коробку:

Код: Выделить всё

__attribute__((noinline)) void touch_noinline(int&) {}

void touch_external(int&);

int f(int x) {
touch_noinline(x);
return x;
}

int g(int x) {
touch_external(x);
return x;
}
< /code>
Но я был неправ: < /p>
touch_noinline(int&):
ret

f(int):
mov     eax, edi
ret

g(int):
push    rax
mov     dword ptr [rsp + 4], edi
lea     rdi, [rsp + 4]
call    touch_external(int&)@PLT
mov     eax, dword ptr [rsp + 4]
pop     rcx
ret
IS Там способ заставить компилятор рассматривать touch_noinline () как черный ящик, а не заглянуть внутрь его при принятии решения о том, как оптимизировать вызовный код? Без необходимости перейти к дополнительным проблемам создания отдельного файла и включения системы сборки, чтобы связать их вместе?


Подробнее здесь: https://stackoverflow.com/questions/797 ... t-optimise
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»