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

Artikel nicht ausreichend tiefschürfend

  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

Stellenmarkt
  1. Fraunhofer-Institut für Arbeitswirtschaft und Organisation IAO, Stuttgart, Esslingen
  2. eco Verband der Internetwirtschaft e.V., Köln
  3. OHB System AG, Bremen, Oberpfaffenhofen
  4. KÖNIGSTEINER AGENTUR GmbH, Stuttgart

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Blu-ray-Angebote
  1. (u. a. 3 Blu-rays für 15€, 2 Neuheiten für 15€)
  2. (u. a. Logan, John Wick, Alien Covenant, Planet der Affen Survival)


Haben wir etwas übersehen?

E-Mail an news@golem.de


Sony-Kopfhörer WH-1000XM3 im Test: Eine Oase der Stille oder des puren Musikgenusses
Sony-Kopfhörer WH-1000XM3 im Test
Eine Oase der Stille oder des puren Musikgenusses

Wir haben die dritte Generation von Sonys Top-ANC-Kopfhörer getestet - vor allem bei der Geräuschreduktion hat sich einiges getan. Wer in lautem Getümmel seine Ruhe haben will, greift zum WH-1000XM3. Alle Nachteile der Vorgängermodelle hat Sony aber nicht behoben.
Ein Test von Ingo Pakalski


    Apple Mac Mini (Late 2018) im Test: Tolles teures Teil - aber für wen?
    Apple Mac Mini (Late 2018) im Test
    Tolles teures Teil - aber für wen?

    Der Mac Mini ist ein gutes Gerät, wenngleich der Preis für die Einstiegsvariante von Apple arg hoch angesetzt wurde und mehr Speicher(platz) viel Geld kostet. Für 4K-Videoschnitt eignet sich der Mac Mini nur selten und generell fragen wir uns, wer ihn kaufen soll.
    Ein Test von Marc Sauter

    1. Apple Mac Mini wird grau und schnell
    2. Neue Produkte Apple will Mac Mini und Macbook Air neu auflegen

    Resident Evil 2 angespielt: Neuer Horror mit altbekannten Helden
    Resident Evil 2 angespielt
    Neuer Horror mit altbekannten Helden

    Eigentlich ein Remake - tatsächlich aber fühlt sich Resident Evil 2 an wie ein neues Spiel: Golem.de hat mit Leon und Claire gegen Zombies und andere Schrecken von Raccoon City gekämpft.
    Von Peter Steinlechner

    1. Resident Evil Monster und Mafia werden neu aufgelegt

    1. Bildbearbeitung: Rawtherapee 5.5 mit Dunstbeseitigung und Soft Light Tool
      Bildbearbeitung
      Rawtherapee 5.5 mit Dunstbeseitigung und Soft Light Tool

      Die kostenlose Bildbearbeitungssoftware Rawtherapee ist als Version 5.5 veröffentlicht worden. Sie enthält neben vielen kleinen Änderungen ein neues Schatten/Highlights-Werkzeug und eine Funktion zur Dunstentfernung in Digitalfotos.

    2. Raiju Mobile: Razer präsentiert Smartphone-Controller für 150 Euro
      Raiju Mobile
      Razer präsentiert Smartphone-Controller für 150 Euro

      Mit dem Raiju Mobile hat Razer seine Controller-Reihe für Sonys Playstations auf Smartphones erweitert. Das Mobiltelefon kann in eine neigbare Halterung gesteckt werden, neben den gewohnten Steuerungselementen stehen vier programmierbare Buttons zur Verfügung.

    3. Datenschutz: Löschen des Tracking-Verlaufs auf Facebook macht Probleme
      Datenschutz
      Löschen des Tracking-Verlaufs auf Facebook macht Probleme

      Im Mai 2018 hatte Facebook versprochen, dass Nutzer ihren Tracking-Verlauf löschen können - ein sehr weitgehendes Zugeständnis an den Datenschutz. Jetzt hat sich das Unternehmen mit einem Zwischenstand über die Umsetzung gemeldet.


    1. 07:56

    2. 17:23

    3. 16:43

    4. 15:50

    5. 15:35

    6. 15:06

    7. 14:41

    8. 13:47