lib_AT91SAM7 von IAR __inline

OP #592894
Lesenswert?

hallo,

ihre kennt sicherlich die "library" von IAR.
darin werden inline-funktionen definiert, um einem das programmieren 
etwas zu erleichtern.

mein problem ist nun, dass in jedem programm.c, in dem diese library 
(bei mir konkret lib_AT91SAM7A3.h) includiert wird, die ganzen inline 
funktionen in den maschinen code kommen, obwohl ich nur einige wenige 
davon benötige.

ich dachte mir immer, inline funktionen werden vor dem kompilieren 
einfach an die stelle eingesetzt. der vorteil von inline ist ja, dass es 
keinen unterprogrammaufruf gibt. daher sehr schnell. andererseits, wird 
der code an jede stelle jedes aufrufes kopiert. daher, wenn man die 
funktion oft braucht, entsteht viel maschinen code.

ich arbeite mit Rowly CrossWorks for ARM V1.5., verwende aber die 
includes von IAR.
muss ich da dem linker irgendwas beibringen, dass er die 
inlinefunktionen weglässt?

bei EINER C-datei ist es ja nicht DIE tragik, ist halt der code etwas 
größer... aber wenn ich zB 3 C-datein habe, kommt es zu 
definitions-konflikten, da jedes objectfile die inline-funktionen 
definiert hat...

ich hoffe mir kann da jemand weiterhelfen.

lg, karl
Moderator Persönliche Seite #593138
Lesenswert?

Nun, bei "inline" wird, wie du schon festgestellt hast, noch eine
explizite Kopie der Funktion angelegt.  Das hängt damit zusammen, dass
die Funktion external linkage hat und dass inline in C eine Art
Empfehlung ist, die der Compiler berücksichtigen darf aber nicht muss.
Es ist daher völlig legales C, dass man von so einer Funktion die
Adresse nimmt und irgendwohin zuweist.  Da der Compiler infolge der
external linkage nicht wissen kann, ob nicht irgendein anderer Modul
letztlich die Adresse der Funktion doch noch benötigt, ist er
gezwungen, die zusätzliche Kopie anzulegen.

Bei static inline ändert sich das Bild, da die Funktion nunmehr für
jeden Modul ("translation unit") nur noch file scope besitzt, der
Compiler folglich verfolgen kann, ob die extra Kopie der Funktion
überhaupt benötigt wird.  Damit kann diese Kopie in der Regel
weggelassen werden.  Aber selbst wenn diese Kopie benötigt wird,
garantiert der durch "static" erzeugte file scope, dass die Funktionen
gleichen Namens aus zwei verschiedenen Modulen am Ende nicht
miteinander kollidieren, sondern eben einfach zweimal da sind.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren