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. Software AG, Berlin
  2. Munich International School, Starnberg Raum München
  3. Bosch Gruppe, Reutlingen
  4. S. Siedle & Söhne Telefon- und Telegrafenwerke OHG, Furtwangen im Schwarzwald

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Hardware-Angebote
  1. ab 399€
  2. und 20€ Steam-Guthaben geschenkt erhalten
  3. täglich neue Deals bei Alternate.de


Haben wir etwas übersehen?

E-Mail an news@golem.de


Yara Birkeland: Autonome Schiffe sind eine neue Art von Transportsystem
Yara Birkeland
Autonome Schiffe sind eine neue Art von Transportsystem

Die Yara Birkeland wird das erste elektrisch angetriebene Schiff, das autonom fahren soll. Das ist aber nicht das einzige Ungewöhnliche daran. Diese Schiffe seien ein ganz neues Transportmittel, das nicht nur von den üblichen Akteuren eingesetzt werde, sagt ein Experte.
Ein Interview von Werner Pluta

  1. Power Pac Strom aus dem Container für Ozeanriesen
  2. Yara Birkeland Norwegische Werft baut den ersten autonomen E-Frachter
  3. SAVe Energy Rolls-Royce bringt Akku zur Elektrifizierung von Schiffen

Grafikkarten: Das kann Nvidias Turing-Architektur
Grafikkarten
Das kann Nvidias Turing-Architektur

Zwei Jahre nach Pascal folgt Turing: Die GPU-Architektur führt Tensor-Cores und RT-Kerne für Spieler ein. Die Geforce RTX haben mächtige Shader-Einheiten, große Caches sowie GDDR6-Videospeicher für Raytracing, für Deep-Learning-Kantenglättung und für mehr Leistung.
Ein Bericht von Marc Sauter

  1. Tesla T4 Nvidia bringt Googles Cloud auf Turing
  2. Battlefield 5 mit Raytracing Wenn sich der Gegner in unserem Rücken spiegelt
  3. Nvidia Turing Geforce RTX 2080 rechnet 50 Prozent schneller

Shadow of the Tomb Raider im Test: Lara und die Apokalypse Lau
Shadow of the Tomb Raider im Test
Lara und die Apokalypse Lau

Ein alter Tempel und Lara Croft: Diese Kombination sorgt in Shadow of the Tomb Raider natürlich für gewaltige Probleme. Die inhaltlichen Unterschiede zu den Vorgängern sind erstaunlich groß, aber trotz guter Ideen vermag das Action-Adventure im Test nicht so richtig zu überzeugen.
Ein Test von Peter Steinlechner

  1. Square Enix Systemanforderungen für Shadow of the Tomb Raider liegen vor
  2. Shadow of the Tomb Raider angespielt Lara und die Schwierigkeitsgrade
  3. Remasters Tomb Raider 1 bis 3 bekommen neue Engine

  1. Nach Chemnitz-Äußerungen: Seehofer holt sich Verfassungsschutzchef Maaßen
    Nach Chemnitz-Äußerungen
    Seehofer holt sich Verfassungsschutzchef Maaßen

    Nach seinen umstrittenen Äußerungen zu ausländerfeindlichen Angriffen muss Verfassungsschutzpräsident Maaßen seinen Posten räumen und wird zum Staatssekretär befördert. Im NSA-Ausschuss war er durch unbelegte Vorwürfe gegen US-Whistleblower Edward Snowden aufgefallen.

  2. Videoportal: Youtube Gaming wird abgeschafft
    Videoportal
    Youtube Gaming wird abgeschafft

    Die Nutzer finden die Trennung zwischen Youtube und Youtube Gaming zu verwirrend, jetzt zieht das Videoportal die Konsequenzen: Spieleinhalte sind künftig im normalen Angebot zu finden - mit ein paar spannenden Extras.

  3. Glasfaser: Wohnungsbaugesellschaften machen selbst FTTH
    Glasfaser
    Wohnungsbaugesellschaften machen selbst FTTH

    Ohne Glasfaser anzubieten, brauchen sich Firmen bei Wohnungsbaukonzernen kaum noch bewerben. Als eigener Akteur beim Netzausbau ist deren Bundesverband deshalb auch gegen das Diginetz-Gesetz.


  1. 19:02

  2. 18:30

  3. 18:24

  4. 17:45

  5. 15:11

  6. 15:00

  7. 13:40

  8. 13:20