|
|
BDKMPSS
offline
OC God 22 Jahre dabei !
|
Ich denke du nimmst mir das nicht übel wenn ich sage, dass dies der völlig falsche "Optimierungs" Ansatz ist. Als erste, wichtigste und oft auch als einzige sinnvolle Optimierung ist der Algorithmus als solcher zu überdenken. Wenn du einen schlechten Algorithmus noch so hochoptimiert implementierst ist so gut wie immer langsamer als ein schlecht implementierter guter Algorithmus. Generell kann man aber trotzdem auch zu deinen Vergleichen Aussagen treffen. Für genauere Erklärungen ist das hier aber wohl nicht der richtige Ort und würde auch etwas zu lang werden. _____ In C hängt nehmen sich globale und lokale Variablen grundsätzlich erst ein mal nichts. In abstrakteren Programmiersprachen sind globale Variablen langsamer, da erst versucht wird sie lokal aufzulösen (zu finden) und dann global. Die globale Auflösung ist oft auch langsamer. In C gilt das aber nicht, da der Compiler beides meistens gleich umsetzt und die Variable in dem Sinne nicht aufgelöst werden muss. Was im konkreten Fall schneller ist, hängt von der Nutzung ab. Wenn du eine Funktion sehr oft aufrufst und diese jedes mal eine neue Variable initialisiert, ist das langsamer als die alte Variable einfach zu überschreiben. Dazu hat man in C 2 Möglichkeiten. Eine globale Variable oder eine lokale "static" variable. Nicht wirklich sinnvolles Pseudo-Code Beispiel: for(int i = 0; i< 1000000; i++) { a(); } a() { int b; b = 99; } ist langsamer als: a() { static int b; b = 99; } was sich wiederum (meistens) genau so verhält wie: static int b; a() { b = 99; } Wenn du Parameter übergibt ist dies langsamer als nichts zu übergeben. Aber viele globale Variablen zu verwenden ist (eigentlich immer) schlechter programmier Stil und bringt wenig bis nichts. _____ Eine iterative Lösung gegen eine rekursive Lösung ist meist schwer abzuschätzen. Die Rekursion verbraucht eigentlich immer mehr Speicher, kann aber auch trotzdem schneller als so manche iterative Lösung sein. Hängt stark vom Problem ab. Wenn du etwas endrekursiv umsetzten kannst hast du mit modernen Compilern fast das gleiche Ergebnis wie mit einer iterativen Lösung (was Speicher und Geschwindigkeit angeht). Eine *perfekte* Iteration sollte exakt das gleiche Ergebnis wie eine *perfekte* Endrekursion liefern. _____ Prototypen gehören zu allen "public" (also in C allen nicht "static") Funktionen und natürlich immer ins header file, welches vor der Main Methode zu inkludieren ist. "private" (also "static" Funktionen in C) vor der Main und den ersten Aufruf der Funktion schreiben, dann keinen Prototyp schreiben. Ob du die Funktions-Implementierung vor oder nach der Main Funktion oder in eine andere Datei schreibst macht überhaupt nichts aus, da der Compiler und Linker das eh zusammen wirft. Das Ergebnis ist in jedem Fall gleich (und gleich schnell). _____ Eine verkettete Liste ist in jeder Sprache stets langsamer als ein Array, außer in Sprachen gibt, bei der das Array nur eine verkettete Liste ist. Es kann aber schneller sein die Liste zu erweitern als ständig ein neues Array anzulegen und umzukopieren. Deshalb hat man die Liste erfunden. _____ Ich würde es immer vorziehen Alles in einem ordentlichen Stil umzusetzen, selbst wenn es ein wenig langsamer ist. Oft optimiert der Compiler es so weit, das das gleiche bei raus kommt, aber das Programm ist einfach wartbarer und *schöner*. Selbst wenn nicht ist die "Verbesserung" für das angesprochene nie mehr als im einstelligen Prozent Bereich. Wenn du es wirklich schnell und ohne overhead haben willst schreibe es in Assembler. Wenn du das ein paar mal gemacht hast ist das auch nicht so extrem schwer und außerdem mach sich das immer gut auf einer Bewerbung. Das wichtigste ist und bleibt aber der Algorithmus, der mal schnell eine Optimierung von mehreren tausend Prozent bringen kann. Viel Spaß weiterhin (Geändert von BDKMPSS um 19:28 am April 14, 2010)
|
Beiträge gesamt: 1860 | Durchschnitt: 0 Postings pro Tag Registrierung: Feb. 2002 | Dabei seit: 8285 Tagen | Erstellt: 19:01 am 14. April 2010
|
|
|
|
gabiza7
offline
OC Profi 14 Jahre dabei !
AMD Athlon II 2700 MHz @ 3700 MHz 46°C mit 1.475 Volt
|
Auch, wenn das jetzt OT ist. Was studierst'n du? Ist das schon Informatik oder Mathe oder so, wo du programmieren musst? Wenn Informatik, kann man das können? Programmiere ja auch, aber nur ein bisschen, aber ich zweifle irgendwie noch an mir, ob das reicht für ein Informatikstudium. Momentan hab ich sehr wenig Zeit, dass ich mich richtig mit Programmierung beschäftige (Abschlussjahr), daher kann ich nur das Nötigste und das auch nur in Delphi, so Variablen deklarieren natürlich, Datentypen umwandeln und Arrays, naja und durch mein Fachreferat ein bisschen Tabellen und so aber das alles nur in Delphi. Ist C schwerer? Wie sieht's mit Assembeln aus, kann man das lernen? (In der TR-Szene gibt's ja Assembler, die die "tomb4.exe" mit ollidbg auseinandernehmen und verändern, ich durfte da auch mal reingucken, aber wenn ich ehrlich bin, verstehe ich davon nichts) Bin dann auch eher praktisch veranlagt, also mir macht PCs bauen und übertakten und so, viel Spaß, aber im Studium kommt das ja wahrscheinlich nicht dran, PC-Hardware-Kenntnisse werden wahrscheinlich vorrausgesetzt und Übertakten ist ja jetzt mal so böse gesagt "nur was für Spinner" (also ist nicht meine Meinung, aber vermutlich die Meinung der ganzen Programmierer und so) (Geändert von gabiza7 um 19:41 am April 14, 2010)
|
Beiträge gesamt: 933 | Durchschnitt: 0 Postings pro Tag Registrierung: Feb. 2010 | Dabei seit: 5361 Tagen | Erstellt: 19:40 am 14. April 2010
|
|
|
|
|
|
gabiza7
offline
OC Profi 14 Jahre dabei !
AMD Athlon II 2700 MHz @ 3700 MHz 46°C mit 1.475 Volt
|
Danke, VoooDooo für deine aufschlussreiche Antwort. Dann bin ich mal beruhigt, wenn man im Studium programmieren lernt, aber wie ist es mit dem Verstehen und Mitkommen? Also in der Schule komm ich im Informatikunterricht sehr gut mit, was würdest du sagen, ist auf der FH wahrscheinlich schon schwerer zu verstehen, oder? Oder hattest du in der Schule kein Informatik und hast daher auch keinen Vergleich? Am Idealisten für mich wäre es ja, wenn ich mein Interesse für PCs und Programmieren sowie Schreiben verbinden könnte, also praktisch mal später vll zu Com! oder so gehen, weil mir das schon Spaß macht z.B. Hardware zu testen und dann darüber zu schreiben (hab bisher noch nicht soviel getestet, bin aber dabei und demnächst wird auch meine Webpage online gehen) sowie hin und wieder auch was zu programmieren. Hab aber keine Ahnung, ob man dazu Info studiert haben muss oder eher was mit Journalistik oder ob es dafür einen kombinierten Studiengang gibt. (Geändert von gabiza7 um 18:03 am April 15, 2010)
|
Beiträge gesamt: 933 | Durchschnitt: 0 Postings pro Tag Registrierung: Feb. 2010 | Dabei seit: 5361 Tagen | Erstellt: 18:02 am 15. April 2010
|
|
|
|