Abo
  1. Foren
  2. Kommentare
  3. Software-Entwicklung
  4. Alle Kommentare zum Artikel
  5. › Daniel J. Bernstein: Ein…

Artikel nicht ausreichend tiefschürfend

Anzeige
  1. Thema

Neues Thema Ansicht wechseln


  1. Artikel nicht ausreichend tiefschürfend

    Autor: mnementh 22.12.15 - 14:25

    Der Artikel erklärt IMHO das Problem nicht ausreichend.

    Undefiniertes Verhalten in C entsteht beispielsweise wenn man einen Null-Pointer derefenziert. Das ist ziemlich offensichtlich ein Programmierfehler. Nun kann es sein, jemand derefenziert einen Pointer ohne Null-Prüfung aber liest den Wert nur aus und macht nichts kritisches damit. Später im Code wird der Pointer auf Null geprüft und danach etwas kritisches getan. Der Compiler aber denkt: der Pointer kann gar nicht Null sein, er wurde ja schon dereferenziert. Also kann die Prüfung wegoptimiert werden. Der Fall trat im Linux-Kernel auf (Beispiel aus verlinktem Blogeintrag):
    static void __devexit agnx_pci_remove (struct pci_dev *pdev)
    {
    struct ieee80211_hw *dev = pci_get_drvdata(pdev);
    struct agnx_priv *priv = dev->priv;

    if (!dev) return;
    ... do stuff using dev ...
    }
    So sieht es harmlos aus, aber der Compiler optimiert die Prüfung raus ob dev null ist.

    Das geht deshalb, weil bei der Definition von C festgelegt wurde, dass der Compiler alles machen darf, sobald undefiniertes Verhalten auftritt. Nicht nur an der Stelle wo das undefinierte Verhalten vorhanden ist, das gesamte erzeugte Programm ist ab der Stelle vogelfrei und darf beliebig verändert werden. Schon im Usenet wurde daher gesagt, der Compiler darf dann nasal demons produzieren.

    Etwas Lesestoff:
    http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html
    http://blog.regehr.org/archives/213
    http://www.catb.org/jargon/html/N/nasal-demons.html

    Und dann noch folgende Zeile: "Dem aktuellen Standard zufolge müssten jedoch sämtliche tatsächlich vorkommende C-Programme als nichtdefiniert gelten."
    Ich bin mir sicher man kann einfache Hello-World-Programme schreiben die laut Standard definiert sind. Richtig ist aber, dass man so leicht in undefinierte Fälle reinrutscht. Daher dürfte die meiste real existierende C-Software undefiniert sein.
    Einige undefinierte Dinge in C:
    http://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviours-that-a-c-programmer-should-know-a

  2. Re: Artikel nicht ausreichend tiefschürfend

    Autor: stiGGG 22.12.15 - 15:59

    Guter Beitrag!

  3. Re: Artikel nicht ausreichend tiefschürfend

    Autor: /dev/42 22.12.15 - 18:01

    Wenn ich das richtig verstehe, dann wäre es auch absolut korrekt, wenn ein C Compiler beim Auftreten einer undefinierten Bedingung, den gesamten Code auf "NOP" optimiert.

  4. Re: Artikel nicht ausreichend tiefschürfend

    Autor: mnementh 22.12.15 - 18:05

    /dev/42 schrieb:
    --------------------------------------------------------------------------------
    > Wenn ich das richtig verstehe, dann wäre es auch absolut korrekt, wenn ein
    > C Compiler beim Auftreten einer undefinierten Bedingung, den gesamten Code
    > auf "NOP" optimiert.
    Ich verstehe das ebenfalls so. Würde aber wohl im Allgemeinen nicht gut ankommen.

    Zudem ist ja das Problem, dass der Compiler undefinierten Code nicht wirklich erkennen kann. Eine Dereferenzierung eines Null-Pointers kann der Compiler in vielen Fällen nicht erkennen. Was in dem Beispiel der Fall ist, ist dass der Compiler annimmt der Programmierer hätte vor der Dereferenzierung sichergestellt dass der Zeiger gültig ist. Der spätere Check ist in der Logik dann unnötig und wird wegoptimiert.

  5. Re: Artikel nicht ausreichend tiefschürfend

    Autor: picaschaf 22.12.15 - 20:18

    Die Dereferenzierung des 0 Pointers ist an sich kein Problem, täglich Brot bei jedem Typsystem. Schreiben, oder für Pointerarithmetik nutzen ist nur etwas "ungünstig".

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Zum Login

Anzeige
Stellenmarkt
  1. Schmitz-Stelzer Datentechnik GmbH, Geilenkirchen
  2. OUTFITTER GmbH, Neu-Isenburg
  3. über Hays AG, Hamburg
  4. KRATZER AUTOMATION AG, Unterschleißheim bei Mün­chen

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Blu-ray-Angebote
  1. 74,99€ (Vorbesteller-Preisgarantie)
  2. 24,99€ (Vorbesteller-Preisgarantie)
  3. Einzelne Folge für 2,99€ oder ganze Staffel für 19,99€ kaufen (Amazon Video)


Haben wir etwas übersehen?

E-Mail an news@golem.de


Montagewerk in Tilburg: Wo Tesla seine E-Autos für Europa produziert
Montagewerk in Tilburg
Wo Tesla seine E-Autos für Europa produziert
  1. Elektroauto Walmart will den Tesla-Truck
  2. Elektrosportwagen Tesla Roadster 2 beschleunigt in 2 Sekunden auf Tempo 100
  3. Elektromobilität Tesla Truck soll in 30 Minuten 630 km Reichweite laden

Fitbit Ionic im Test: Die (noch) nicht ganz so smarte Sportuhr
Fitbit Ionic im Test
Die (noch) nicht ganz so smarte Sportuhr
  1. Verbraucherschutz Sportuhr-Hersteller gehen unsportlich mit Daten um
  2. Wii Remote Nintendo muss 10 Millionen US-Dollar in Patentstreit zahlen
  3. Ionic Fitbit stellt Smartwatch mit Vier-Tage-Akku vor

E-Golf im Praxistest: Und lädt und lädt und lädt
E-Golf im Praxistest
Und lädt und lädt und lädt
  1. Garmin Vivoactive 3 im Test Bananaware fürs Handgelenk
  2. Microsoft Sonar überprüft kostenlos Webseiten auf Fehler
  3. Inspiron 5675 im Test Dells Ryzen-Gaming-PC reicht mindestens bis 2020

  1. Autonomes Fahren: Singapur kündigt fahrerlose Busse an
    Autonomes Fahren
    Singapur kündigt fahrerlose Busse an

    Die Straßen in Singapur sind oft verstopft. Autonome Nahverkehrsmittel sollen helfen, das Verkehrsproblem zu verringern. Ab 2022 sollen im ÖPNV des Stadtstaats fahrerlose Busse unterwegs sein.

  2. Coinhive: Kryptominingskript in Chat-Widget entdeckt
    Coinhive
    Kryptominingskript in Chat-Widget entdeckt

    Unternehmen, die ein Chat-Widget zum Kundensupport nutzen, haben in den vergangenen Tagen heimlich bei den Kunden die Kryptowährung Monero geschürft. Betroffen waren auch der Speicherhersteller Crucial und der Sportanbieter Everlast.

  3. Monster Hunter World angespielt: Die Nahrungskettensimulation
    Monster Hunter World angespielt
    Die Nahrungskettensimulation

    Großes Monster frisst kleines Monster - meistens: In Monster Hunter World dürfen wir von der Spurensuche bis zum Endkampf die Jagd auf Fantasybestien nacherleben. Golem.de hat das teils faszinierend glaubwürdige Actionspektakel ausprobiert.


  1. 17:56

  2. 15:50

  3. 15:32

  4. 14:52

  5. 14:43

  6. 12:50

  7. 12:35

  8. 12:00