Wenn du das Ding global machst, bekommst du oft breiteren Code, weil GCC einen direkten Zugriff macht.
Geschieht der Zugriff hingegen indirekt, werden die schlankeren und genauso schnellen Zugriffe via X, Y, oder Z-Reg benutzt. Allerdings kommt hintzu, daß du den Pointer erst beschaffen must.
Zu deinem eigentlichen Problem:
Die Deklaration einer globalen Variablen gehört in einen Header, ihre Definition in einen C-File.
c-file:
h-file:Code:#include "h-file" // Definition zeug_t zeug; ... { zeug_t *pzeug = &zeug; zeug.a = ... pzeug->a = ... foo (pzeug); foo (&zeug); }
Im obigen Beispiel erzeugt GCC fürCode:typedef struct { ... } zeug_t; extern void foo (zeug_t*); // Deklaration extern zeug_t zeug;
zeug.a = ...
leider den gleichen Code wie für
pzeug->a = ...,
Das zu verhindern und GCC den indirekten Zugriff verwenden zu lassen, ist nicht immer einfach.
Lesezeichen