115 votos

¿Cómo puedo saber gcc no en línea de una función?

Decir que tengo esta pequeña función en un archivo de código fuente

static void foo()
{

}

y voy a construir una versión optimizada de mi binario sin embargo, no quiero que esta función entre líneas (para fines de optimización). hay una macro que me puede agregar en un código fuente para evitar el inline?

gracias

137voto

alex tingle Puntos 3134

Desea que el gcc-específica noinline de atributo.

Esta función impide que un atributo la función de ser considerado para inline. Si la función no tienen efectos secundarios, hay optimizaciones otros de inline que hace llamadas a la función a ser optimizada lejos, a pesar de la llamada a la función es vivir. Para mantener este tipo de llamadas de ser optimizado de distancia, poner asm ("");

El uso de esta forma:

void __attribute__ ((noinline)) foo() 
{
  ...
}

28voto

lukmac Puntos 831

GCC tiene un interruptor llamado

-fno-inline-small-functions

A fin de utilizar que cuando se evoca gcc. Pero el efecto secundario es que todas las otras pequeñas funciones también son no-alineada.

21voto

Andy Ross Puntos 7024

Un portátil manera de hacer esto es para llamar a la función a través de un puntero:

void (*foo_ptr)() = foo;
foo_ptr();

A pesar de que esto produce diferentes instrucciones a rama, que puede no ser su objetivo. Lo que trae a colación un punto bueno: ¿cuál es su objetivo?

13voto

arsane Puntos 6500

En caso de que obtenga un error del compilador para "atributo((noinline))", usted puede intentar:

noinline int func(int arg)
{
    ....
}

9voto

KenBee Puntos 91
static __attribute__ ((noinline))  void foo()
{

}

Esto es lo que ha funcionado para mí.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: