Hi Robert,
Das ist nicht richtig. Zumindest bei x86-CPUs braucht ein BYTE-Zugriff exakt genausoviele Taktzyklen wie ein DWORD-Zugriff.
Wie denn das? Fahren da nicht bei einem Befehl immer 32 Bit Daten mit dem Bus?
Richtig. Und bei einem WORD-Zugriff werden 16, bei einem BYTE-Zugriff sogar 24 davon ignoriert. Der Zeitbedarf bleibt der gleiche.
Im Gegenteil: Ein DWORD-Zugriff kann sogar länger dauern, dann nämlich, wenn die Adresse nicht durch 4 teilbar ist.
Sollten „intelligente“ Compiler™ (bzw. Speicher-Allokatoren) nicht automatisch die Daten dem entsprechend zur Verfügung stellen?
Ja, wenn man sie mit entsprechenden Direktiven oder Grundeinstellungen nett darum bittet.
Zu deinem Problem an dieser Stelle: Warum nimmst du keine union:
Das ist ja nicht Sinn der Sache. Eine union nimmt soviel Speicherplatz in Anspruch wie ihr größtes Element. Wo bleibt also der Nutzen, wenn ich so einen Datentyp wieder in ein struct oder Array stecken will? Ich will ja z.B. einen gegebenen Speicherbereich mit Datenstrukturen füllen (BYTE und DWORD waren nur willkürlich gewählte, einfache Beispiele, meist sind es structs), deren genauer Aufbau erst zur Laufzeit durch Konfigurationsdateien oder Benutzerangaben bekannt wird.
Was für Verhältnisse?
Damit meine ich fragwürdige Optimierungen, die mir 5 Byte Hauptspeicher (siehe auch oben) und zweihundert Taktzyklen (so schnell kann man noch nicht mal blinzeln) sparen.
Im Einzelfall gebe ich dir Recht. Aber bei großen Arrays sind auch 3 Byte Einsparung pro Element nicht zu verachten; bei Schleifen, die viele tausend Mal durchlaufen werden, sind auch 200 Taktzyklen schon interessant. Vor allem (aber nicht nur) dann, wenn man zur Abwechslung mal nicht für einen 3GHz-Boliden schreibt, sondern für einen niedlichen kleinen 8bit-µC.
Außerdem ist es ein gutes Gefühl, wenn die Kollegen anerkennend fragen, wie ich den so viel Funktionalität in einem gerade mal 200kB großen Executable unterbringe, oder warum andere, kommerzielle Produkte nicht genauso schnell sein können. :-)
Wieso denn? Inflation ist doch eine praktische Sache, auch in der Volkswirtschaft, weil es dem Kunden schmackhaft gemacht wird, seine wertloser werdenden Güter/Computer durch neuere zu ersetzen, d.h. sparen ist uncool. Wenn die Programmierer verantwortlich mit den Rechnerressourcen umgingen, gäbe es nicht ca. alle drei Jahre das Bedürfnis nach einem neuen, leistungsfähigeren Computer. Und die Programmierer freuen sich darauf, dass sie wieder mehr Speicher, mehr CPU-Zeit (und mehr Farben) zum Ausfüllen haben. Das ganze ist ein toller Kreislauf für alle, die mit Computern Geld verdienen.
Ja. Und ein Fluch für alle, die einen Computer, das nötige Zubehör und die Software einfach nur brauchen. Ich kenne genug Leute, die noch heute einen Rechner und Software benutzen, die fünf Jahre und älter sind, weil es den eigenen Anforderungen genügt. Auch wenn uns die Werbung suggeriert, dass man alle paar Monate einen neuen PC haben müsste.
Schönes Wochenende,
Martin
Ich wollt', ich wär ein Teppich. Dann könnte ich morgens liegenbleiben.