Eine allgemeine Frage - für zwischendurch.

Post Reply
Message
Author
chrisjumper
Posts: 104
Joined: 12. Feb 2004 12:53
Location: Jülich

Eine allgemeine Frage - für zwischendurch.

#1 Post by chrisjumper »

Hallo Helfer,

also es geht um folgendes: Also bevor man ein Programm Kompiliert und Verlinkt entfernt der Compiler "unerreichbaren Code" - das ist eine Tatsache die in einer Fachzeitschrift stand, also werde ich das mal glauben.

Vielmehr kann ich mir jetzt nicht vorstellen was das sein soll, und warum man sowas macht.. ist doch nur zusätzliche Arbeit.

Handelt es sich hier um Kommentare? Oder um Code der für eine andere "Prozessorstrucktur" vorgesehen ist? Oder um was anderes?

Mfg

Chris

User avatar
heinrich
Posts: 219
Joined: 22. Sep 1999 11:22
Location: N49.137 E8.544

#2 Post by heinrich »

Das was da weg-optimiert werden kann, sind sicherlich Kommentare aber es kann auch nicht erreichbarer Quellcode sein. Schleifenkonstrukte sind sicher auch ein Ziel der Optimierungs-Engine des Compilers...

Ansonsten verweise ich mal auf Wikipedia: http://de.wikipedia.org/wiki/Compiler#P ... imierung_2
It just works.

Warp

#3 Post by Warp »

Das ist Code der einfach nicht gebraucht wird. Ensteht durch Programmierfehler. Uninitialisierte Variablen sind so ein Fall. Copyaufrufe auf uninitialisierte Variablen und alles was auf diese zugreift. Wenn man ein Programm schreibt in denen Konstrukte vorkommen die niemals gebraucht werden ist das 'dead code' (Toter Code).
Warum soll der Compiler die umsetzen? Das der Compiler das merkt und damit mehr Arbeit hat ist klar. Doch wenn der Programmierer richtig programmiert und sowas erst nicht macht dann bräuchte der Compiler sich nicht darum zu kümmern.
Achte mal darauf wenn du ein Programm kompilierst wie oft es da passiert das so etwas in der Art drin steht.

Code: Select all

Uninitialized Variable in ......... 
Macht keinen Sinn diesen Code in Binär umzuwandeln weil der steht nutzlos im Programm herum und langweilt sich. Frisst auch noch Brot obwohl er nix macht.
Kommentare sind es nicht, weil das ist kein Code sondern reine Textanweisungen die den Compiler nicht interessieren.

Warp

#4 Post by Warp »

Ach ja und das was Heinrich da geschrieben hat ist natürlich auch wichtig.
Sowohl die Optimierung als auch nur das zu schreiben was auch benutzt wird. Klingt logisch ist aber nicht immer überschaubar, deshalb passiert es leider sehr oft.

Udo Kanter

#5 Post by Udo Kanter »

MMN versteht man unter "unerreichbaren Code" Codestücke die nie durchlaufen werden. Z.B.:

Code: Select all

if ( true ) {
    a = x+1;
} else {
    // unreachable code
   for &#40; int i=0; i<100; i++ &#41; &#123;
        ....
   &#125;
&#125;
oder

Code: Select all

void test&#40;&#41;
&#123;
    return;
    // unreachable code
   for &#40; int i=0; i<100; i++ &#41; &#123;
        ....
   &#125;
&#125;
Auf keinen Fall werden vom Compiler uninitialisierte Variablen entfernt! Gemeint sind hier wohl Variablen die definiert, aber nicht benutzt werden.

Code: Select all

void test&#40;&#41;
&#123;
    int i;          // nichtinitialisierte Variable
    int j=0; 

    if &#40; i==0 &#41; &#123; // Gibt Ärger, Wert von i ist zufällig

    &#125;

&#125;

In obigem Beispiel könnte j vom Compiler entfernt werden, da j nicht verwendet wird.

Gruß
Udo

Post Reply