2012-06-12 15 views
6

Tengo una función que realiza solo algunas operaciones, como incrementos. Lo he declarado como inline y con __attribute__((hot)).impacto en el rendimiento de la combinación "caliente" y "en línea" para una definición de función

Gcc Doc sugiere seguir para hot atributo:

El atributo caliente se utiliza para informar al compilador que una función es un punto caliente del programa compilado. La función se optimiza más agresivamente y en muchos destinos se coloca en la subsección especial de la sección de texto para que todas las funciones activas aparezcan juntas mejorando la localidad.

que pueden interpretarse como para las funciones en caliente no inline que se colocarían en el área de dirección inferior del mapa de direcciones del proceso. Pero las llamadas a las funciones inline se suponen literalmente reemplazadas por su código. Entonces la pregunta es ¿cómo funciona realmente la combinación de inline y hot?

Respuesta

1

Consulte When should I write the keyword 'inline' for a function/method? para obtener una explicación bastante buena de la palabra clave inline. Parece una contradicción declarar una función como hotyinline; si la función no está definida en un archivo de encabezado, o no está definida en varias unidades de compilación, entonces no debe declararlo como inline.

De hecho, la decisión de reemplazar la llamada de función con la definición de función y colocarla "en línea" depende del compilador. Por lo tanto, la combinación de inline y hot probablemente ignore la parte inline y la ubique en la sección text.hot del programa. El enlazador es la única parte del proceso que realmente se preocupa por la palabra clave inline, y luego no hace necesariamente lo que usted cree que hace.

Cuestiones relacionadas