Forum: Compiler & IDEs Zugriff Performance globale Variable vs global struct


von alex (Gast)


Lesenswert?

Hallo,

eine kurze, vielleicht einfache Frage:
Ist der Zugriff auf auf v1 immer genau so schnell wie auf v2? Wenn ich 
den Assembler code für ARM9 / Cortex M3 anschau, dann scheint das der 
Fall zu sein. Aber gilt das allgemein?
1
typedef struct
2
{
3
  int v1;
4
}test_def;
5
6
test_def test;
7
int v2;
8
9
void main()
10
{
11
  test.v1 = 5;
12
  v2=6;
13
}

Gruß Alex

von Andreas B. (andreas_b77)


Lesenswert?

Beide Variablen haben eine feste, zur Zeit der Übersetzung bekannte 
Adresse. Also gibt es da keinen Unterschied.

von (prx) A. K. (prx)


Lesenswert?

Es ist möglich, dass ein Compiler bei Zugriff auf mehrere Variablen in 
einer Struktur in der Funktion einmalig die Adresse der Struktur läd und 
dann effizienter relativ dazu die Variablen adressiert. Bei separaten 
Variablen kann er das nicht.

von ... (Gast)


Lesenswert?

Alignment ???

von (prx) A. K. (prx)


Lesenswert?

Ist kein Thema. Misalignment tritt nur auf, wenn man es explizit 
fordert.

von alex (Gast)


Lesenswert?

Ok, danke für die Infos :-)

von Bronco (Gast)


Lesenswert?

alex schrieb:
> Ist der Zugriff auf auf v1 immer genau so schnell wie auf v2? Wenn ich
> den Assembler code für ARM9 / Cortex M3 anschau, dann scheint das der
> Fall zu sein. Aber gilt das allgemein?

Ich wage zu behaupten, daß das von der verwendeten CPU und vom 
C-Compiler abhängt.
1
typedef struct
2
{
3
  int8_t x
4
  int32_t y;
5
}test_def;
mit 16 oder 32Bit CPU und
1
#pragma pack
-> Der Compiler müßte y an eine ungerade Adresse in der Struktur legen.
Sofern die CPU überhaupt 16/32Bit-Zugriffe auf ungerade Adressen 
erlaubt, würde der Zugriff auf y mehrere Buszyklen benötigen.
Wenn man einfach nur Variablen anlegt, kann der Compiler diese selber 
auf optimale Adressen legen.

von Rolf Magnus (Gast)


Lesenswert?

Bronco schrieb:
> Wenn man einfach nur Variablen anlegt, kann der Compiler diese selber
> auf optimale Adressen legen.

Das kann (und tut) er auch bei Strukturen, wenn man ihm das nicht gerade 
explizit verbietet.

von (prx) A. K. (prx)


Lesenswert?

Bronco schrieb:
> -> Der Compiler müßte y an eine ungerade Adresse in der Struktur legen.

Sicher. Aber das passiert nur wenn es bei dem betreffenden Prozessor 
nicht stört, oder wenn man es mit "pack" eigens drauf anlegt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.