In den Anfängen der Computer-Geschichte hatten Programmierer 2048 Bytes Speicher um darin ihr Programm abzulegen. In den Speicher fanden das Programm an sich, alle Variablen des Programmierers und das Bootloader-Program des Systems seinen Platz. Es war ziemlich eng, wenn man bedenkt dass dieser Artikel 2791 Zeichen hat. Was aber die Programmierer nicht davon abhielt grandiose Programme zu schreiben, die klug durchdacht und puristisch im Platzverbrauch waren.
Mit Tricks knappste man sich nach Möglichkeit an anderer Stelle noch Speicher ab. Besass der Computer eine Grafikkarte, was damals unüblich war, konnte man mit einer kleinen Fingerübung noch etwas Speicher heraus kitzeln. Meistens stellte die Grafikkarte 40 Zeichen auf 12 Zeilen dar. Direkt aus dem Speicher gelesen, benötigte man für die Ausgabe auf dem Bildschirm nur 40×12=480 Bytes. Die übliche Größe eines RAM war aber 512 Bytes. Somit hatte man am Ende des Videospeichers 32 Bytes für Auslagerungen übrig.

Oder man komprimierte die verwendeten Bits eines Datentyps, um ein Bit mehr heraus zu holen (COMP3 in Cobol).
Solche Tricks erscheinen uns heute fremd. Wir haben mittlerweile Computer die 256.000x mehr Speicher haben und noch um einiges Mal mehr schneller sind. Der Speicherverbrauch muss nicht mehr gründlich durchgerechnet werden, bevor es an das Programmieren geht. Man ist sich sicher, dass man genug Speicher hat.
Von meinem heute scheidenden Azubi habe ich Programmcode überlassen bekommen, in dem er 3^15, also 14.348.907, LongInts (Datentyp, vier Bytes groß) deklariert hat, obwohl er nur zwei Zustände pro Variable speichern muss. Das Programm funktioniert. Es meckert auch nicht über den horenden Speicherbedarf - immerhin 57MB. Was ich auch gesehen habe, war eine For-Schleife die nur 8x Zustände kennt, wird aber mit einem Integer statt mit einem Byte betrieben.
Diese Mentalität zur Platzverschwendung kommt nicht von ungefähr. Selbst der Datentyp Boolean, der nur zwei Zustände speichern kann und genau der richtige für meinen Azubi gewesen wäre, hätte zwei Bytes (auch Word genannt) verbraucht, obwohl ein Bit (1/8 eines Bytes) ausgereicht hätte.
Microsoft Visual Basic ist in diesem Zusammenhang besonders in Geberlaune.
Datenfelder eines beliebigen Datentyps benötigen 20 Bytes im Speicher, vier Bytes für jede Datenfelddimension und die Anzahl an Bytes, die für die eigentliche Daten benötigt werden.
Das macht für eine Integer (Ganzzahl, zwei Bytes groß) 26 Bytes. Da bleibt mit unserem Videospeicher-Trick nicht viel übrig.

12 Kommentare
Wenn ich an die Zeiten von Amiga denke, wie klein da die Programme waren, und heute alles aufgeblasen ist. Omniweb hat um die 10 Megabyte - für einen Browser ganz stattlich. Firefox ist nicht viel besser. Der Fixrefox hätte nichmal auf meine erste Festplatte gepasst… und da hatte ich früher unter Amiga Betriebssystem und Programme wie Textverarbeitung, Bildbearbeitung, Video-Verhaltung und ein paar Spiele. Alles auch mit Grafik und so… ein Browser war sogar auch dabei
An dieser Stelle denken wir an iCab (geht die Entwicklung eigentlich weiter?), der passt auf eine Diskette.
Der Artikel stützt wieder meine These das jeder Programmieranfänger mit einem 286er beginnen sollte seine ersten 5 Programme zu schreiben. Nach den 5 Programmen DARF man die ganze Sache hinsichtlich der heute üblichen 512Mb Standard-Ram-Bestückung auch wieder ganz fix vergessen.
g3no. Da gebe ich dir voll und ganz recht. Bei den älteren Semestern (zu denen ich nicht gehöre) wundert man sich auch über das Laden von mehr Daten die nicht auf den Bildschirm passen.
Ich glaube mal irgendwo gelesen zu haben, dass in Schleifen durchaus ein int dem byte vorzuziehen ist, da es sowieso in einem int-register landet und sonst noch umgewandelt werden müsste. Bin mir aber auch nicht mehr ganz sicher und bestimmt hängt das auch noch vom Compiler ab, was der daraus macht.
Ja, auch ich kann mich noch gut an Zeiten erinnern, wo man 64 kB RAM zur Verfügung hatte und da nicht nur Betriebssystem und Pascal-Compiler Platz gefunden haben, sondern auch ein selbstgeschriebenes Taschengeld-Verwaltungsprogramm - auch wenn es nicht viel zu tun hatte …
Auch war ich unheimlich froh, dass bei meinem ersten richtigen Rechner (Vobis 386SX-16, 1MB RAM) statt der versprochenen 40 MB wegen Lieferschwierigkeiten eine “riesige” 52-MB-Platte eingebaut wurde. Und irgendwann hab ich dann viel Erspartes zusammengekratzt und auf 2 MB RAM aufgerüstet. Das waren noch Zeiten …
Damals gabs auch noch die Speicherwettbewerbe a la “Wer schafft am meisten Platz unter DOS?”. Da wurde mit EMS, HIGHMEM, UMB, DEVICEHIGH und XMS hantiert, um das letzte Byte für die Anwendungen freizuschaufeln. Heute kauft man halt einfach einen weiteren Speicherriegel. Na, wer kann mit den ganzen Abkürzungen da oben noch was anfangen? Nein, EMS steht nicht für die “aufgebohrte” SMS …
Aber ich gebe es zu: heutzutage verschwende ich beim Programmieren auch nicht allzuviele Gedanken an die Speicherauslastung. Stabilität, Funktionalität und durchdachtes Klassen-Design sind mir da wichtiger, Speicheroptimierung kommt dann am Schluss, falls sie überhaupt nocht notwendig ist. Denn IMHO trägt gutes Design einer Anwendung dazu bei, speichersparend zu programmieren.
Bei den o. g. Begriffen fällt mir spontan noch MEMAKER ein. Die Wunderwaffe bei der Speicheroptimierung. War am im Kampf um mehr Speicher in meinem Freundeskreis verpöhnt, da es die o.g. Competition aushebelte.
Ich hatte auf meinem ersten Rechner - auch ein 386 SX - zig Speicherkonfigurationen. CD-ROM laden oder nicht laden. Soundkarte laden oder nicht laden. Wenn man CD-ROM brauchte musste man wohl oder übel die Soundkarte ja auch laden. Und wenn dann immer in den HIGHMEM. Mein Vater hatte einen Computerhandel und somit hatte ich damals schon wahnwitzige 2MB EMS. Und ne 20MB 3,5″-Connor-Festplatte. Die habe ich heute noch.
Das war schon eine komplett andere Welt.
Da fällt mir ein, Bill Gates wird ja nachgesagt dass er mal gesagt hätte, 640KB wären völlig ausreichend. Wenn’s stimmt, dann spiegelt das ungefähr genau das wieder was wohl ein Programmierer dachte als er von 2KB auf 640KB gewechselt ist. Mehr als ausreichend.
Btw. Steve Wozniak sagte vor kurzem er würde im Paradies leben. Er hätte heutzutage ein Computer der Millionenmal mehr Speicher hat als sein Computer (Apple I+II) - der für ihn schon aureichend Speicher hatte.
@lemming
Wenn du den Bericht in «Neues» auf 3Sat gesehen hast, dann war das nicht woz, sonder Andy Herzfeld.
Wae das Andy? Ok, dann habe ich mich geirrt.
Da fällt mir doch gleich wieder die Situation mit einem meiner AZUBI ein (Mediengestalter). Sitzt vor einem G-400 (zu dem Zeitpunkt state of the art) und schaut mit verschränkten Armen auf den Monitor.
Da die Retusche nur in A4 zu machen war, gibt es eigentlich keine langen Wartezeiten zu erwarten. Nachgeschaut was er macht:
Er wollte einen Ausschnitt aus einem Bild nehmen. Drum hat er ein 10 MB-Bild erst auf 2 GB hochgerechnet und dann den Ausschnitt genommen. Vom Verständnis der Bildinterpolation mal ganz abgesehen. Ob ein Bild 10 MB oder 2 GB hat - war völlig wurscht.
Wer das Bit nicht ehrt…
Haaaach. Das waren noch Zeiten, als man sein ganzes ROM - Listing auswendig kannte.