Laufzeitumgebung, Laufzeitbibliothek, Bibliothek
-
hey leute,
ich tue mich immer schwerer mit den Begriffen: Laufzeitumgebung, Laufzeitbibliothek und Bibliothek.
Kann mir evtl einer von euch den genauen unterschied erklären?
bei wiki lese ich unter lautzeitbib, dass gewissen funktionen des eigentlichen quellcodes nicht in cpu spezifischen code übersetzt werden, sondern auf die laufzeitbib verlinkt werden.
Hat aber eine normale bib nicht die selbe funktion?
und wie der begriff "laufzeitumgebung" noch einzubringen ist, weiß ich so langsam gar nicht mehr.
Ich dachte bisher der quellcode eines programmes wird in eine art zwischencode übersetzt (bytecode o.ä.) und dann von einem interpreter ausgeführt, wobei der interpreter die laufzeitumgebung darstellt, was aber eigentlich dann wieder nichts anderes als eine laufzeitbib ist und nach meiner komischen theorie wieder eine bib.ich weiß dass ich mich hier sehr verwirrend ausgedrückt habe, aber genau so siehts auch in meinem kopf gerade aus
hoffe jemand kann da etwas ordnung reinbringen
gruß
-
Hatten wir schon mal: http://www.c-plusplus.net/forum/viewtopic-var-t-is-241556.html
-
danke für den link
mir wird aber leider immer noch nicht der unterschied klar zu einer normalen bib.
scheinbar wandelt der c-compiler nicht jede c-funktion um in reinen maschinencode sondern verweist hier teilweise auf die laufzeitbib.
wäre die funktion jetzt nicht eine c-interne funktion (sonder zB eine mathematische aus einer mathe-bib), wäre das dann nicht genau das selbe verfahren.
wo soll jetzt der genau unterschied sein?gruß
-
Nimm die Worte nicht zu ernst. Meistens kann man aus dem Kontext erkennen, wovon die Rede ist.
scheinbar wandelt der c-compiler nicht jede c-funktion um in reinen maschinencode sondern verweist hier teilweise auf die laufzeitbib.
Das ist der Unterschied zwischen "statischem" und "dynamischem" Linken. Aus der Sicht des Compilers ist das ganz egal. Die Frage ist nur, ob der Linker den Code von zB printf() in die EXE schreibt, oder nur einen Verweis auf eine Bibliothek (dafür muss das Betriebssystem natürlich ein wenig Magie im Hintergrund machen).
Siehe auch
http://en.wikipedia.org/wiki/Linker
-
MatheStein schrieb:
mir wird aber leider immer noch nicht der unterschied klar zu einer normalen bib.
Du darfst ja auch keinen technischen Unterschied suchen. Die Runtime-Lib ist halt einfach nur eine andere Kategorie. Aber sie kann halt technisch einfach nur eine DLL wie jede andere sein. Du mußt das eher so sehen: Runtime-Lib ist obligatorisch, andere Libs sind optional.
-
ich glaube so langsam verstehe ich es
welche dinge stehen denn zb in der runtimelib?
gruß
-
Z.B. die C++-Funktionen
new
unddelete
, denn irgendwie muß ja der Speicher für die Objekte angelegt und frei gegeben werden. Die sind ja offensichtlich obligatorisch, um ein C++-Programm zum Laufen zu bekommen. Wenn das nicht zur Verfügung steht, kann ich C++-Programmierung gleich knicken.Aber auch andere wichtige Funktionen sind darin enthalten: Behandlung für nicht gefangene Exceptions, exit(), system() usw. In der Runtime-Lib ist auch die Standard-Library enthalten, wie die fstream-Klassen usw.
-
danke für die antwort
ich hatte jetzt eher auf ein beispiel in C gehofft, weil mir dort alle funktionen wie systemaufrufe oder abstraktionen von paar assemblerfunktionen vorkommen und ich mir konkret keine funktion einfällt, die in der laufzeitbib sein könnte.
gruß
-
malloc, dealloc? Oder wie die Dinger in C heißen.
-
sind das nicht systemaufrufe?
-
Artchi schrieb:
Z.B. die C++-Funktionen
new
unddelete
, denn irgendwie muß ja der Speicher für die Objekte angelegt und frei gegeben werden. Die sind ja offensichtlich obligatorisch, um ein C++-Programm zum Laufen zu bekommen. Wenn das nicht zur Verfügung steht, kann ich C++-Programmierung gleich knicken.kannste nicht in C++ objekte z.b. so erzeugen?
CppObject create() { CppObject mein_neues_objekt; return mein_neues_objekt; }
^^ müsste doch auch gehen, ganz ohne new.
Artchi schrieb:
dealloc?
realloc
alphaomega schrieb:
sind das nicht systemaufrufe?
nee, das sind für gewöhnlich library-funktionen. das OS stellt grössere speicherblöcke zur verfügung (eine k-bytes mindestens), von denen man sich z.b. mit 'malloc' kleinere häppchen abzwacken kann kann.
-
;fricky schrieb:
...(eine k-bytes mindestens)...
äääh, einige, 4K oder so, auf 32bit windowsen.
-
^^ müsste doch auch gehen, ganz ohne new.
Natürlich, da landet es auch auf dem Stack und es muss kein Heap angefordert werden.