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
ich bin entzückt!!! es funktioniert!! jörg, kannst du mir noch kurz erklären, wo nun der unterschied ist zwischen STATIC INLINE und INLINE?? vielen dank, karl
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.
ich glaub, dass ich es so halbwegs verstanden habe. vielen dank nochmals. <thread closed>
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.