Nochwas zu Codegröße/Laufzeit:
IMHO wird eine Version mit normalen Funktionen (F-Version) keinen merklichen Vorteil an Flashverbrauch haben gegen eine Inline-Version (I-Version).
Grund: Es muss nicht nur Code für die Aufrufe erzeugt werden, sondern auch Code, um die callclobbered Register um einen Aufruf zu sichern und die Argumente/RetValue in die von der ABI dafür vorgesehenen Übergaberegister zu kopieren.
Ein Vergleich der beiden Versionen wäre dennoch interessant. Alle Implementierungen in den Header zu klatschen ist aber keine gute Idee, weil die Implementierungen in der F-Version dann mehrfach vorliegen, wenn die Fix-Arith in verschiedenen Modulen gebraucht wird.
Man könnte den Header so aufbauen:
fix-arith.c implementiert wie gewohnt und nur in der F-Version wird gegen fix-arith.o gelinkt. (Noch besser wäre ne feingranulierte Lib).Code:#ifndef _FIX_ARITH_H_ ...blabla #ifdef SOME_SYMBOL # define FIX_MEM_CLASS static inline // oder always_inline #else # define FIX_MEM_CLASS extern #endif // SOME_SYMBOL // prototypes FIX_MEM_CLASS uint8_t foo (...); ... #ifndef SOME_SYMBOL #include "fix-arith.c" #endif // !SOME_SYMBOL ...
Lesezeichen