Veröffentlicht 26. September 201113 j Moin moin und Hallo. Da ich programmiertechnisch ein wenig schwach auf der Brust bin müsste ich dann doch mal hier die eine oder andere Frage stellen. Ich hoffe dass die mir wer beantworten könnte. Also: Es geht um die Programmiertechnick der Unterprogramme, wobei die auf verwendung nicht zutrifft, dass ein Unterprogramm schneller ausgeführt werden kann, als "monolithischer Code" und somit Laufzeit spart. Ich kann allerdings mit dem Begriff ein feuchtes gar nichts anfangen. Daher was ist Monolithischer Code? o.O Danke schon mal für etwaige antworten :cool:
26. September 201113 j des muss irgendwas mit dem Kernel zu tun haben. Mehr kann ich dir da aber auch nicht sagen!
26. September 201113 j Autor des muss irgendwas mit dem Kernel zu tun haben. Mehr kann ich dir da aber auch nicht sagen! Na gut, hilft mir ja immerhin ein bisschen bis mehr oder weniger gar nicht weiter. Ich möchte ja zum verständnis überhaupt erst einmal wissen was das überhaupt ist. ^-^
26. September 201113 j Nein, das hat nichts mit dem Kernel zu tun. Als monolithischen Code bezeichnet man einen rießigen, unwartbaren Klotz an Code.
26. September 201113 j Autor Nein, das hat nichts mit dem Kernel zu tun. Als monolithischen Code bezeichnet man einen rießigen, unwartbaren Klotz an Code. Das heist also so viel wie n Brocken an Code den ich nicht mehr verändern kann? Oder ist der Code einfach nur in einer bestimmten Form aber noch leicht anpassbar? o.O
26. September 201113 j Ein monolithischer Code ist recht vereinfacht: nur eine main(), ohne jegliche funktionsaufrufe - und wenn es sich nicht vermeiden lässt, dann alle Libraries statisch verlinkt. Vorteil: Der Overhead beim Funktionsaufruf (Rücksprungadresse auf den Stack, Register sichern - am Ende alles wieder zurück) wird gespart. Auch das Laden von Libaries erübrigt sich... Nachteil: Erklärt sich von selber... Viel Spass bei der Wartung... tsg
26. September 201113 j Das heist also so viel wie n Brocken an Code den ich nicht mehr verändern kann? Oder ist der Code einfach nur in einer bestimmten Form aber noch leicht anpassbar? o.O Nein das heißt das der Code aus einem einzigem Stück besteht und nicht in verschiedene Module oder ähnliches unterteilt ist.
26. September 201113 j Autor Nein das heißt das der Code aus einem einzigem Stück besteht und nicht in verschiedene Module oder ähnliches unterteilt ist. Achso! Na gut, jetzt kann ich mir da auch ungefähr was drunter vorstellen. Immerhin versteh ich schon mal was die hier von mir wollen. Danke schön. Aber, die Laufzeit ist nicht kürzer, als wenn das Programm in Unterprogrammen geteilt worden wäre oder?
26. September 201113 j Autor Okay... dann bin ich schon einen ziemlich großen schritt weiter in meinem Verständnis zu der Sache. (:
26. September 201113 j Aber, die Laufzeit ist nicht kürzer, als wenn das Programm in Unterprogrammen geteilt worden wäre oder? Die "Laufzeit" ist primär abhängig vom Algorithmus, siehe Komplexität (Informatik) Vorteil: Der Overhead beim Funktionsaufruf (Rücksprungadresse auf den Stack, Register sichern - am Ende alles wieder zurück) wird gespart. Auch das Laden von Libaries erübrigt sich... Nachteil: Erklärt sich von selber... Viel Spass bei der Wartung... Diese Aussage ist nicht korrekt: Inline function - Wikipedia, the free encyclopedia Inline Funktionen machen genau das, d.h. der Compiler setzt an die Stelle die inline deklarierten Code / kann den Code ersetzen. D.h. ich kann auch mit Hilfe von OOP einen strukturierten Code erzeugen aber via Compiler Befehl monolithischen Code erzeugen.
26. September 201113 j Autor Wirklich sehr gute antwort. (: Nun türmt sich mir die Frage auf, was ein Arithmethischer Ausdruck ist? (Steht hier ebenfalls auf dem Zettel was mich denn so Programmiertechnisch verwirrt und steht im zusammenhang mit dem Monolithischen Code o.O)
26. September 201113 j Nun türmt sich mir die Frage auf, was ein Arithmethischer Ausdruck ist? Salopp gesagt "x=5" oder "f(x) = x+3" wären arithmetische Ausdrücke. Generell zur Komplexität gibt es die Landau-Symbole die Algorithmen in Klassen einteilen, wie ihre "worst-case Laufzeit" ist. Natürlich muss man unterscheiden, zwischen der asympotischen Betrachtung und einer realen Implementierung. Generell gilt bei den Komplexitätsklassen O(c*n) [hier für ein lineare Komplexität], wobei das c eine Konstante ist. Bei der Limesbetrachtung fallen mathematisch Konstanten heraus. Real kann dieses c aber durchaus viel ausmachen. Als Beispiel würde ich hier die Cholesky-Zerlegung nennen, wobei man das c bis auf 1/6*c optimieren kann.
26. September 201113 j Autor Salopp gesagt "x=5" oder "f(x) = x+3" wären arithmetische Ausdrücke. Generell zur Komplexität gibt es die Landau-Symbole die Algorithmen in Klassen einteilen, wie ihre "worst-case Laufzeit" ist. Natürlich muss man unterscheiden, zwischen der asympotischen Betrachtung und einer realen Implementierung. Generell gilt bei den Komplexitätsklassen O(c*n) [hier für ein lineare Komplexität], wobei das c eine Konstante ist. Bei der Limesbetrachtung fallen mathematisch Konstanten heraus. Real kann dieses c aber durchaus viel ausmachen. Als Beispiel würde ich hier die Cholesky-Zerlegung nennen, wobei man das c bis auf 1/6*c optimieren kann. Ui. Also, den ersten satz hab ich verstanden. Den 2ten auch noch. Aber dann isses leider zu hochgestochen für mich. Wie gesagt, ich steck noch nicht sehr tief im Code. Wenn ich also jetzt einen Arithmethischen Ausrduck haben möchte, kann ich ja eine Funktion verwenden, die mir genau einen wert gibt oder? Damit ich bei: "x+3" das x, anschließend benennen kann. Oder lieg ich da ganz arg in der falschen Richtung? Würde das dann auch mit einer Algorithmusfunktion ein Ergebnis liefern?
26. September 201113 j Wenn ich also jetzt einen Arithmethischen Ausrduck haben möchte, kann ich ja eine Funktion verwenden, die mir genau einen wert gibt oder? also int x = 5; x += 3; und function int f(int y) { return y+3; } int x=5; x = f(x); liefert in beiden Fällen identische Ergebnisse. Wobei der Compiler im zweiten Fall mehr Code generiert, denn hier müssen auf dem Stack mehrere Strukturen erzeugt werden. Damit ich bei: "x+3" das x, anschließend benennen kann. Oder lieg ich da ganz arg in der falschen Richtung? Würde das dann auch mit einer Algorithmusfunktion ein Ergebnis liefern? Was ist denn eine "Algorithmusfunktion"? Ein Algorithmus ist eine "Vorschrift" um ein Problem zu lösen, die mit der realen Repräsentation erst einmal nichts zu tun hat. Eine Funktion ist an eine Repräsentation / Sprache gebunden Funktion (Programmierung) bzw Funktion (Mathematik) Um eine Lösung für ein Problem zu erzeugen kann man auf Funktionen zurück greifen, d.h. man zerlegt das Problem in Teilprobleme und löst diese. Alle Lösungen zusammen ergeben dann die Gesamtlösung (letztendlich gilt dabei Optimalitätsprinzip von Bellman ). Ich kann für eine Problemlösung den gleichen Algorithmus verwenden, aber der geschriebene Code wird jedes Mal anders aussehen. Ein Beispiel: Aus 3 Zahlen die kleinste Heraus finden: int a= 3; int b= 5; int c = 6; std::cout << std::min(std::min(a, , c) << std::endl; [/code] oder [code] int a= 3; int b= 5; int c = 6; int erg = 0; if (a < erg = a; else erg = b; end if (c < erg) erg = c; end std::cout << erg << std::endl; oder min(a,b,c) :- if (a < && (b < c) print(a); else if (a > min(b,a,c); end if (b > c) min(a,c, end end [/code] es sind 3 Darstellungen für das gleiche Problem, letztendlich für den gleichen Algorithmus
27. September 201113 j Autor Na gut. Ein bisschen Licht ins dunkle bringts mir. Da ich wie gesagt nich so tief in der Materie stecke, bin ich davon ausgegangen dass so etwas wie eine Algorithmusfunktion, in einem gewissen Rahmen existent wäre. Aber da dem nicht so scheint, vergess ich das einfach mal wieder. Den rest seh ich durchaus ein. Mit dem Algorithmus gibts verschiedenen Code, merk ich mir. Gut gut, dann muss ich mir mal ein Fachbuch fürs Programmiertechnische kaufen, mittlerweile fühl ich mich so als würde ich hier nur noch Fachbegriffe aus der Hohen Mathematik vor mir sehen.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.