-
-
Erfahrener Benutzer
Robotik Einstein
Zur Grösse: Bei WinAVR gibt's auch ein avr-size, das macht genau was ihr wollt 
GCC 3.4.1 inlinet kleine Funktionen von selbst, auch grössere Funktionen werden geinlinet wenn sie nur 1x benutzt werden.
Ich compiliere mit -Os, und ein Blick auf den generierten asm-Code schadet nie...
Soll eine Funktion geinlinet werden, so kann das ein Kompiler nur dann gescheit machen, wenn sie als static deklariert ist. Daher ist es sinnvoll, die direkt im Header zu deklarieren, wenn sie in mehreren Modulen benutzt werden soll.
Eine Funktion als extern inline zu deklarieren ist nicht sinnvoll, denn der Compiler kann den Code einer solchen Funktion nicht kennen (es sei denn, er steht im gerade compilerten Modul).
Damit Funktionen, die inline stehen, nicht nochmal im .o auftauchen, gibt es den Schalter -fno-keep-inline-functions
Wird eine Funktion nicht geinlinet, obwohl man das will, warnt GCC bei -Winline.
inline generell deaktivierten sollte mit -fno-inline gehen und für eine Funktion mit __attribute__((noinline))
GCC hat übrigens eigene Kriterien, um zu entscheiden, ob eine Funktion es "wert" ist, geinlinet zu werden, so daß inline bzw __attribute__ ((inline)) nicht immer greifen. Drehen kann man an dieser Entscheidung mittels -finline-limit=<n>
Gruß, Johann
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen