Forum: PC-Programmierung Optimierungs einstellung des GCC (LINUX) verändert verhalten


von Thomas B. (escamoteur)


Lesenswert?

Hi,

bin grad auf ein merkwürdiges Phänomen gestoßen. Ich versuche derzeit 
einen DLNA-Client, den es bisher nur als Gtk+ Programm gibt als Console 
umzustricken zwecks späterer Verwendung auf einem Beagle Bone Black.

In diesem code
1
static void
2
append_media_server (GUPnPDeviceProxy *proxy)
3
{
4
        GUPnPDeviceInfo   *info;
5
        GUPnPServiceProxy *content_dir;
6
        char              *friendly_name;
7
8
9
        info = GUPNP_DEVICE_INFO (proxy);
10
11
        content_dir = get_content_dir (proxy);
12
        friendly_name = gupnp_device_info_get_friendly_name (info);
13
14
        if ( (friendly_name != NULL) && (content_dir != NULL)) {
15
                GList      *child;
16
17
                g_list_append(MediaServers,proxy);
18
19
                g_free (friendly_name);
20
21
                /* Append the embedded devices */
22
                child = gupnp_device_info_list_devices (info);
23
                while (child) {
24
                        append_media_server(GUPNP_DEVICE_PROXY (child->data));
25
26
                        g_object_unref (child->data);
27
                        child = g_list_delete_link (child, child);
28
                }

habe ich etwas sehr merkwürdiges beobachtet. Lasse ich die 
Optimierungseinstellungen der Compiler auf -o2, bekomme ich für 
"friendly_name" keine vernünftigen Werte (Überprüft im Debugger). 
Schalte ich die Optimierung aus, bekomme ich lesbare Namen.

Füge ich bei eingeschalteter Optimierung die Zeile
1
        cout << friendly_name << endl;

hinter gupnp_device_info_get_friendly_name ein, bekomme ich auch 
ordentliche Werte. Kann mir einer erklären warum? Auch ohne die Ausgabe 
wird friendly_name ja in der if Abrage benutzt, sollte daher ja auch 
nicht wegoptimiert werden.

von Jope (Gast)


Lesenswert?


von user (Gast)


Lesenswert?

Bei optimierten Code kann der Compiler Variablen in Registern halten, 
oder anderweitig wegoptimieren. Deswegen sieht man teilweise nichts.

von Thomas B. (escamoteur)


Lesenswert?

Dank euch. Ich bin in diesem Fall vor allem den default Einstellungen 
von Eclipse zum Opfer gefallen, die beim Erstellen eines Projektes die 
Optimireung auf -o2 stellen womit ich überhaupt nicht gerechnet habe.

Gruß
Tom

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.