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


Dieses Thema wurde geschlossen.

Stellenmarkt
  1. OSRAM GmbH, München
  2. METZLER : VATER campaigns GmbH, München-Schwabing
  3. Consors Finanz, München
  4. AMS Marketing Service GmbH, München

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Hardware-Angebote
  1. und 25€ Steam-Gutschein erhalten
  2. (Neuware für kurze Zeit zum Sonderpreis bei Mindfactory)


Haben wir etwas übersehen?

E-Mail an news@golem.de


3D-Druck on Demand: Wenn der Baumarkt Actionfiguren aus Stahl druckt
3D-Druck on Demand
Wenn der Baumarkt Actionfiguren aus Stahl druckt

Es gibt viele Anbieter für 3D-Druck on Demand und die Preise fallen. Golem.de hat die 3D-Druckdienste von Toom, Conrad Electronic, Sculpteo und Media Markt getestet, um neue Figuren der Big-Jim-Reihe zu erschaffen.
Ein Praxistest von Achim Sawall


    Github-Übernahme: Ein super Deal - für Microsoft und den Rest
    Github-Übernahme
    Ein super Deal - für Microsoft und den Rest

    Mit der Übernahme von Github manövriert sich Microsoft geschickt aus einer Abhängigkeit und stärkt dabei noch sein Cloud-Geschäft. Das setzt wohl vor allem Atlassian unter Druck. Was der Kauf für das Open-Source-Engagement Githubs bedeutet, ist damit eigentlich auch völlig klar.
    Eine Analyse von Sebastian Grüner

    1. Code-Hosting Microsoft übernimmt Github für 7,5 Milliarden US-Dollar
    2. Entwicklerplattform Microsoft will Github kaufen
    3. Verschlüsselung Github testet Abschaltung alter Krypto

    Sonnet eGFX Box 650 im Test: Wenn die Vega 64 am Thinkpad rechnet
    Sonnet eGFX Box 650 im Test
    Wenn die Vega 64 am Thinkpad rechnet

    Die eGFX Box 650 von Sonnet ist ein eGPU-Gehäuse, das dank 650-Watt-Netzteil auch mit AMDs Radeon RX Vega 64 läuft. Die Box ist zwar recht leise, dennoch würden wir den Lüfter gerne steuern.
    Ein Test von Marc Sauter und Sebastian Grüner

    1. Razer Core X eGPU-Box kostet 300 Euro
    2. eGFX Breakaway Box 650 Sonnets Grafik-Gehäuse läuft mit Vega 64
    3. XG Station Pro Asus' zweite eGPU-Box ist schlicht

    1. Elektromobiltät: UPS kauft 1.000 Elektrolieferwagen von Workhorse
      Elektromobiltät
      UPS kauft 1.000 Elektrolieferwagen von Workhorse

      Der US-Paketdienstleister UPS will eine Flotte von 1.000 Elektrofahrzeugen betreiben, die das Unternehmen bereits beim Hersteller Workhorse bestellt hat. Sie sollen im innerstädtischen Lieferverkehr eingesetzt werden.

    2. Low Latency Docsis: Huawei will Latenz von 1 Millisekunde im Kabelnetz erreichen
      Low Latency Docsis
      Huawei will Latenz von 1 Millisekunde im Kabelnetz erreichen

      Die Latenzzeiten im TV-Kabelnetz sollen minimal werden. Sie sollen laut Huawei noch über Docsis 3.1 hinaus verbessert werden.

    3. Riders' Day: Beschäftigte von Essenslieferdiensten protestieren
      Riders' Day
      Beschäftigte von Essenslieferdiensten protestieren

      Gegen befristete Arbeitsverhältnisse, Solo-Selbstständigkeit, Zahlung pro Auslieferung und Überwachung: In der kommenden Woche protestieren Beschäftigte von Online-Essenslieferdiensten.


    1. 16:18

    2. 14:18

    3. 12:48

    4. 11:43

    5. 19:18

    6. 12:33

    7. 12:19

    8. 11:36