Hi,
Schreibt man in C eine Zeichenkette in doppelten
Anführungszeichen, wird diese zunächst in der compilierten
Programmdatei irgendwohin hard-codiert
Beim Ausführen des Programms gelangt dieser String
zusammen mit dem Maschinencode des Executables
in einen schreibgeschützten Bereich, von dem mir
gerade der Fachterminus entfallen ist.
Ich denke, Du meinst den Code-Bereich? Die Daten des Strings stehen so gesehen mit im Programmcode drin, das stimmt. Und der Code kann nie geändert werden. Es wäre jedoch denkbar, dass es Compiler-abhängig ist, wie diese Daten im Code abgelegt sind. Der Compiler hat die Anweisung, eine Folge von Bytes an einen bestimmten Speicher zu kopieren. Letztlich tut er das ja mit einzelnen Schreibbefehlen für jedes einzelne Byte oder Wort, und das könnte er auch ohne, dass er den gesamten String vorher zusammenhängend ablegt.
Die Variable 'bla'
im obigen Beispiel enthält dann die Anfangsadresse
dieses hardcodierten Strings,
...der tatsächlich im Code-Bereich liegt? Und dahinter liegen die kompletten Bytes des Strings? Finde ich interessant. Dann stimmt so gesehen Deine Aussage, der String wäre schreibgeschützt. Denn lesend müssten man ja drauf zugreifen können. Trotzdem sollte man es wohl besser unterlassen, seine Daten im Code abzulegen, um damit zu arbeiten...
Bei Deiner Aufzählung von veränderlichen Speicherbereichen hast Du übrigens den Datenbereich vergessen.
Grüsse
Stefanie