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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.