Estoy usando gcc con la optimización de -finline-functions para compilaciones de versiones. Para combatir la saturación del código porque trabajo en un sistema integrado, quiero decir que no en línea funciones particulares. La forma obvia de hacer esto sería a través de atributos de función, es decir, , atributo (noinline). El problema es que esto no parece funcionar cuando enciendo la optimización de las funciones globales -finline que es parte del conmutador -O3.gcc -finline-functions behavior?
También tiene algo que ver con el hecho de que se trata de una plantilla, ya que no se incluye una versión no plantilla de la misma función, que es la esperada.
¿Alguien tiene idea de cómo controlar la alineación cuando este interruptor global está activado?
Aquí está el código:
#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;
}
No está relacionado, pero los identificadores que comienzan con un guión bajo seguido de una letra mayúscula están reservados para el compilador. – GManNickG
¿No debería adjuntarse __atribución __ ((noinline)) a la definición? – jpalecek
@jpalecek: No es un error de compilación – user176168