ben wrote:
>
> Ich habe testweise Datenbereiche, die global liegen müssen in eine
> struct gepackt, das Ergebnis war, dass der code deutlich größer
> (~400Byte) war als vorher. Das sah in etwa so aus:
>
1 | > //global in einer header datei
|
2 | > typedef struct{
|
3 | > unsigned char var1[32];
|
4 | > unsigned char var2[64];
|
5 | > }daten;
|
6 | >
|
7 | > daten a;
|
8 | >
|
9 | > //irgendwo
|
10 | > a.var1[3] = 134;
|
11 | > /usw...
|
12 | >
|
Das wird dir nichgt viel bringen (wenn überhaupt)
Wovon die Appnote spricht, ist sowas:
Anstelle von
1 | uint8_t day;
|
2 | uint8_t month;
|
3 | uint8_t year;
|
wird vorgeschlagen, das so zu machen
1 | struct date
|
2 | {
|
3 | uint8_t day;
|
4 | uint8_t month;
|
5 | uint8_t year;
|
6 | };
|
7 |
|
8 | struct date d;
|
Die angegebene Begründung folgt folgender Idee:
Wenn du ein Datum verändern muss, dann müssen nacheinander
day, month, year aus dem Speicher geladen (oder geschrieben)
werden. Dazu muss aber die Speicheradresse gebildet werden,
damit mit einem Load bzw. Store darauf zugegriffen werden
kann. Da es sich um 3 getrennte Variablen handelt, wird die
Adresse mglw. 3 mal in einem Register zusammengebaut um die
Operation über die Bühne gehen zu lassen.
In der Strukturvariante hingegen, genügt es die Speicheradresse
nur einmal zu bestimmen um dann alle 3 Operationen relativ
zu dieser Adresse durchzuführen.
Ob dieses Argument heute noch zieht: Keine Ahnung. Schreib
so, wie es dir am Natürlichsten vorkommt. Wenn einzelne Variablen
logisch zusammengehören, so wie im obigen Beispiel ein Datum,
dann verpass dem Ganzen eine Struktur. Dadurch wird dann oft
die Übergabe solcher Daten an Funktionen vereinfacht.
Wenn die Daten nichts miteinander zu tun haben, dann lass es sein.
> Wieso wird hier plötzlich soviel mehr Code erzeugt? Habe ich etwas
> übersehen?
Man müsste sich den Code genau ansehen und was der Compiler
daraus macht. Allerdings ist eine Erhöhung von 400 byte schon
keine Kleinigkeit mehr. Daher war diese Änderung kontraproduktiv.
So ist das bei Optimierungen: Manchmal bewirken gut gemeinte
Optimierungen das genaue Gegenteil.
Gerade für Optimierungen gibt es kein Patentrezepz.