Я использую gcc с оптимизацией -finline-functions для релизных сборок. Чтобы бороться с раздуванием кода, потому что я работаю во встроенной системе, я хочу сказать, не включайте определенные функции. Очевидный способ сделать это - использовать атрибуты функции, т.е. attribute (noinline). Проблема в том, что это не работает, когда я включаю глобальную оптимизацию -finline-функций, которая является частью ключа -O3.
Это также связано с тем, что оно шаблонизировано, поскольку не шаблонная версия той же функции не становится встроенной, как и ожидалось.
Кто-нибудь знает, как управлять встраиванием, когда этот глобальный переключатель включен?
Вот код:
#include <cstdlib>
#include <iostream>
using namespace std;
class Base
{
public:
template<typename _Type_>
static _Type_ fooT( _Type_ x, _Type_ y ) __attribute__ (( noinline ));
};
template<typename _Type_>
_Type_ Base::fooT( _Type_ x, _Type_ y )
{
asm("");
return x + y;
}
int main(int argc, char *argv[])
{
int test = Base::fooT( 1, 2 );
printf( "test = %d\n", test );
system("PAUSE");
return EXIT_SUCCESS;
}