C Forever

Mythos mangelnde Speichersicherheit

Der Mythos der mangelnden Speichersicherheit in "C" hält sich ja hartnäckig und wird durch Pressemeldungen z.B. auf heise.de oder golem.de immer wieder aufs Neue unters Volk gebracht, hauptsächlich um Sprachen wie Rust o.ä. zu bewerben.

Ich werde also hier versuchen damit aufzuräumen.

Ist "C" speichersicher ?

Ganz klare Antwort : per se - nein !
Erweiterte Antwort : wenn man es haben will - ja !

Die Sprache "C" enthält keine und die Basis-Bibliothek "libc" eher wenig Ansätze für Speichersicherheit. Dies muss man als Anfänger in der "C"-Programmierung möglichst schnell verinnerlichen. Und als Profi sollte man es sich immer wieder mal ins Gedächtnis rufen. Dieser "Mangel" hilft auf der anderen Seite dabei kompakte und schnelle Programme zu erzeugen (wofür "C" ja mal entwickelt wurde, Stichwort "Betriebssystem").

Grundsätzlich muss sich der geneigte C-Programmierer selbst um die Speichersicherheit in seinem Programm kümmern. Dafür kann er aber auch selbst entscheiden, ob, und wenn ja, wo er etwas dafür unternehmen muss bzw. will.

Da es viele verschiedene Arten von Speicherunsicherheit gibt, sind auch die Möglichkeiten zur Vermeidung vielfältig und vielgestaltig. Genauso vielfältig sind auch die Gründe für oder gegen den Einsatz von Speichersicherheitstechnologien.

Möglichkeiten um die Speichersicherheit zu erhöhen

Grundsätzliche Anmerkungen

Für die Speichersicherheit kann man selbst schon ein paar grundsätzliche Vorkehrungen treffen.

Externe Tools

Als "externe Tools" bezeichne ich hier Programme, mit denen sich der Quellcode auf mögliche Fehler und Überraschungen überprüfen lässt. Je nach verwendetem Programm werden damit syntaktische und semantische Auffälligkeiten gefunden.

Programmerweiterungen

Es gibt drei Möglichkeiten zur Programmerweiterung : Die folgenden Sachen habe ich noch nicht intensiv ausprobiert. Sobald ich mich ausführlich(er) damit beschäftigt habe (ist ja grad gar keine "Dauenrd-am-Strand"-Zeit), werde ich meine Erfahrungen hier einfließen lassen.

Für und Wider des Einsatzes für Speichersicherheit

Auch hier muss man wieder unterscheiden :
- externe Tools
- Programmerweiterungen
Die aufgeführten Erkenntnisse entstammen meiner eigenen Programmiererfahrung und sind sicher nicht vollsrtändig. Aber sie regen vielleicht den einen oder anderen zum Nachdenken an.

Externe Tools

Für den Einsatz externer Tools spricht : Dagegen spricht :

Programmerweiterungen

Für Programmerweiterungen spricht : Dagegen spricht :

Fazit

Speichersicherheit beim Programmieren mit "C" ist kein Hexenwerk, erfordert allerdings Wissen und Aufwand.

Dafür erhält man, so man es will und den Aufwand nicht scheut, kompakte und schnelle Programme.

In Programmiersprachen wie Rust ist der Aufwand schon eingebaut, das eigentlich nötige Wissen um Speicherfehler braucht man nicht. Dafür sind die in solchen Sprachen geschriebenen Programme größer und langsamer. Der Sicherungscode ist immer eingebaut, auch an Stellen, wo er eigentlich nicht gebraucht würde.

Schließlich finde ich den Rust-Code aufgrund der mMn. "zusammengefrickelten" und verzweifelt erscheinenden zwanghaften Bemühungen um "Speichersicherheit", abgesehen von der ungewohnten Syntax, schlecht les- und wartbar und bei größeren Modulen extrem anfällig für aufwändig zu findende Programmierfehler.
Aber das nur nebenbei ...

© Uwe Jantzen 14.12.23