Entwickler-Ecke
Basistechnologien - Verständnisfrage: unsafe Code
VampireSilence - Di 11.10.11 20:08
Titel: Verständnisfrage: unsafe Code
Hallo Zusammen,
ich hätte da mal eine relativ simple Frage, die sich mir aber nicht ganz erschließt. Wenn ich eine Funktion oder einen Code-Abschnitt als unsafe deklariere, kann ich dort in C# Pointer einsetzen. Aber wieso werden Pointer überhaupt als unsicher angesehen ? Ich meine in C ist der Umgang damit doch schließlich auch Gang und Gebe.
mfg
- VampireSilence
pdelvo - Di 11.10.11 20:30
VampireSilence hat folgendes geschrieben : |
Hallo Zusammen,
ich hätte da mal eine relativ simple Frage, die sich mir aber nicht ganz erschließt. Wenn ich eine Funktion oder einen Code-Abschnitt als unsafe deklariere, kann ich dort in C# Pointer einsetzen. Aber wieso werden Pointer überhaupt als unsicher angesehen ? Ich meine in C ist der Umgang damit doch schließlich auch Gang und Gebe.
mfg
- VampireSilence |
Mit Pointern bekommst du ein starkes Werkzeug, mit dem man ziemlich viel machen kann. Man kann aber auch ziemlich viel kaputt damit machen. Pointer sind für die meisten Dinge in .net überflüssig. Wenn man mit pointern arbeitet verliert man sehr viel Sicherheit, die man durch .net erhält. Und damit man das nicht als C-Programmierer macht, und die Gewohnheiten fortsetzt muss man solchen Code in unsafe Blöcke stecken. Außerdem verlangen Pointer Operationen feste Speicherbereiche, wo die Daten liegen. Das ist generell in .net nicht gegeben. Die Runtime schiebt die aten hin und her, so, wie sie am besten passen. Deswegen auch zB das fixed Schlüsselwort um das verschieben zu verhindern. Damit stellt man sich selbst ein Bein, indem man der Runtime verbietet zu Optimieren. Das ist nicht im Sinne des Erfinderst. Und um zu bestätigen, dass du dir darüber im klaren bist braucht man das unsafe Schlüsselwort und muss mit /unsafe kompilieren
VampireSilence - Di 11.10.11 21:58
Ok, dann ist das in der Tat sinnvoll. Danke, jetzt geht mir ein Licht auf !
mfg
- VampireSilence
Dr. Hallo - Mi 12.10.11 11:59
| Zitat: |
| Aber wieso werden Pointer überhaupt als unsicher angesehen ? |
Ein Pointer ist ein zeiger auf eine bestimmte Speicheradresse. Gefährlich wird es dann, wenn dein Pointer auf einen nicht definierten Bereich im Speicher zeigt (also auf einen nicht von deinem Programm alloziierten bereich) und dort Werte verändert. Wenn dieser Speicherort von keinem anderen Prozess gerade benutzt wird ist das kein Problem. Andernfalls kannst du damit sogar Windows zum absturz bringen. Du musst also zb bei einer schreibenden abarbeitung eines Arrays über einen Pointer genau darauf achten, dass die durch das Array gegebenen Speichergrenzen nicht überschritten werden.
Th69 - Mi 12.10.11 12:13
Hallo Dr. Hallo,
| Zitat: |
Wenn dieser Speicherort von keinem anderen Prozess gerade benutzt wird ist das kein Problem. Andernfalls kannst du damit sogar Windows zum absturz bringen.
|
Das ist nicht richtig, denn Windows verwendet natürlich "Virtual Memory", d.h. auf andere Prozesse kann man nicht direkt (mit einem Zeiger) zugreifen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!