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. Automotive Safety Technologies GmbH, Weissach
  2. operational services GmbH & Co. KG, Wolfsburg, Braunschweig, München
  3. Fresenius Medical Care Deutschland GmbH, Schweinfurt
  4. Elektror airsystems GmbH, Ostfildern bei Stuttgart

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Blu-ray-Angebote
  1. 12,99€
  2. (u. a. Hobbit Trilogie Blu-ray 43,89€ und Batman Dark Knight Trilogy Blu-ray 17,99€)


Haben wir etwas übersehen?

E-Mail an news@golem.de


Materialforschung: Stanen - ein neues Wundermaterial?
Materialforschung
Stanen - ein neues Wundermaterial?
  1. Colorfab 3D-gedruckte Objekte erhalten neue Farbgestaltung
  2. Umwelt China baut 100-Meter-Turm für die Luftreinigung
  3. Crayfis Smartphones sollen kosmische Strahlung erfassen

Lebensmittel-Lieferservices: Für Berufstätige auf dem Lande oft "praktisch nicht nutzbar"
Lebensmittel-Lieferservices
Für Berufstätige auf dem Lande oft "praktisch nicht nutzbar"
  1. Amazon Go Sechs weitere kassenlose Supermärkte geplant
  2. Kassenloser Supermarkt Technikfehler bei Amazon Go
  3. Amazon Go Kassenloser Supermarkt öffnet

Ryzen 5 2400G und Ryzen 3 2200G im Test: Raven Ridge rockt
Ryzen 5 2400G und Ryzen 3 2200G im Test
Raven Ridge rockt
  1. Smach Z PC-Handheld nutzt Ryzen V1000
  2. Ryzen V1000 und Epyc 3000 AMD bringt Zen-Architektur für den Embedded-Markt
  3. Raven Ridge AMD verschickt CPUs für UEFI-Update

  1. LAA: Nokia und T-Mobile erreichen 1,3 GBit/s mit LTE
    LAA
    Nokia und T-Mobile erreichen 1,3 GBit/s mit LTE

    Nokia und T-Mobile US haben 1,3 GBit/s aus LTE herausgeholt. Das gelang im Testlabor mit Licensed Assisted Access (LAA) und Carrier Aggregation.

  2. Alcatel 1X: Android-Go-Smartphone mit 2:1-Display kommt für 100 Euro
    Alcatel 1X
    Android-Go-Smartphone mit 2:1-Display kommt für 100 Euro

    MWC 2018 Alcatel bringt fünf neue Smartphones mit 2:1-Display auf den Markt. Mit dabei ist auch ein 100 Euro teures Modell mit Android Go. Zudem wurden vier neue Mittelklasse-Modelle mit einer normalen Android-Version vorgestellt.

  3. Apple: Ladestation Airpower soll im März 2018 auf den Markt kommen
    Apple
    Ladestation Airpower soll im März 2018 auf den Markt kommen

    Apple soll im nächsten Monat mit dem Verkauf seiner kabellosen Airpower-Ladematte beginnen. Das gibt zumindest die japanische Webseite Mac Otakara an, von ihren Informanten erfahren zu haben.


  1. 22:05

  2. 19:00

  3. 11:53

  4. 11:26

  5. 11:14

  6. 09:02

  7. 17:17

  8. 16:50