Hallo Der,
Wenn ich da "saubermache", kann ich vermutlich komplett auf die CRTL verzichten.
Unwahrscheinlich. Vergiss nicht den Startup-Code, der letztlich dein main aufruft. Der ist nicht so gewaltig, allerdings referenziert der wieder Komponenten der CRT. Eine gut geschriebene CRT würde alle Initialisierungen on demand machen, und zwar erst, wenn das entspechende Teilsystem benutzt wird. Tut gcc das?
Nein. Das ist ein seit über 30 Jahren tief verwurzelter Ehrgeiz. Ich habe das Programmieren auf einem C64 in Assembler begonnen, da zählte noch jedes Byte!
Lass das los. Ich habe ebenfalls noch liebevolle Erinnerungen an meinen Atari 800. Aber dieser Ehrgeiz bringt Dich nirgendwohin. Deine Zeit ist zu wertvoll dafür. Die Zeit für deinen C64 war deine eigene. Aber jetzt programmierst Du auf einem PC mit Gigabytes Hauptspeicher und musst deine Arbeitsstunden bezahlt bekommen. Was nützt es, wenn Du in 4 Stunden Arbeit 10KB in deiner Anwendung sparst? Ich weiß, dass das für Leute in unserem Alter, die auf einem Sinclair ZX81 mit 1KB shared RAM ein Space Invaders programmieren konnten, schmerzhaft ist. Aber es ist einfach so.
Wenn Du eine Speicherstruktur hast, die millionenfach verwendet wird (bei mir: die LINE-Struktur in einem Logfile-Viewer) und deren Speicherbedarf du halbieren kannst (bei mir: Umstellen von .net Unicode mit 2 Byte pro Zeichen auf den Bytecode aus der Logdatei), kann das bedeuten, dass man nicht 3 Logdateien zu je 100MB in den Speicher bekommt, sondern 20 davon. Und eine Logdatei in 5 Sekunden lädt statt in 50, wie beim Logviewer des Systemherstellers. Für solche Gewinne lohnt sich Bitknabberei. Ich musste grundlegende Stringfunktionen neu schreiben und Speicher selbst verwalten. Aber ohne dieses Tool würde ich beim Durchsuchen von Logs Stunden brauchen. DAS hat sich gelohnt. Es ist aber die große Ausnahme. Wenn Du Megabyteweise Daten verarbeitest, sind Codeeinsparungen im KB Bereich sinnlos.
Rolf
sumpsi - posui - obstruxi