Seite 4 von 5

Verfasst: 18.01.2009 11:38
von remi_meier
freak hat geschrieben:Ist kein Bug.

@"Test" gibt die Position des statischen "Test" strings zurück. Den gibt es in der Exe nur einmal (wäre ja auch Unsinn X mal die gleiche Bytesequenz in die Exe zu schreiben).
Wenn man den ändert dann hat man alle "Test" Strings geändert. Ist irgendwie logisch.

Wenn man den String einer Variable zuweist bekommt man eine Kopie und kann die manipulieren wie man will. String literale sind nicht zum manipulieren gedacht.
Freut mich, dass du die Idee zumindest nicht gleich verwirfst.
Kleine Anregungen:
- Sogar in C gibt es eine Exception, wenn man das gleiche versucht.
- Unter Linux (und ich denke auch unter Windows) ist das für Fred
eine Sache von ~5min dieses "Feature" einzubauen. Einfach die Strings
nicht unter der Zeile

Code: Alles auswählen

section ".data" writeable
sondern unter die Zeile

Code: Alles auswählen

section ".rodata"
schreiben und alle könnten glücklich sein.
- Hat scheinbar keine ersichtlichen Nachteile (ist wohl sogar noch
schneller)...

Die Datasection ReadOnly zu machen, wäre immer noch ein Wunsch
von mir. Aber dieser Wunsch würde ev. bei einigen Personen ein paar
Codes inkompatibel machen...

Verfasst: 18.01.2009 12:31
von PMV
remi_meier hat geschrieben:Die Datasection ReadOnly zu machen, wäre immer noch ein Wunsch
von mir. Aber dieser Wunsch würde ev. bei einigen Personen ein paar
Codes inkompatibel machen...
Ich glaub kaum, dass jemand die festen Strings tatsächlich bisher benutzt
hat, bzw. die dies machen freuen sich sicher darüber, das sie endlich
gesagt bekommen, warum ihr programm so instabil ist :D

MFG PMV

Verfasst: 18.01.2009 15:31
von Little John
remi_meier hat geschrieben:- Sogar in C gibt es eine Exception, wenn man das gleiche versucht.
- Unter Linux (und ich denke auch unter Windows) ist das für Fred
eine Sache von ~5min dieses "Feature" einzubauen.
Wenn das stimmt (was ich zwar nicht beurteilen kann, aber zu bezweifeln im Moment keinen Grund habe), dann sollte es einfach gemacht werden, und länger als 5 Min. darüber zu diskutieren lohnt sich nicht. :mrgreen:

Gruß, Little John

Verfasst: 18.01.2009 18:15
von freak
Little John hat geschrieben:
remi_meier hat geschrieben:- Sogar in C gibt es eine Exception, wenn man das gleiche versucht.
- Unter Linux (und ich denke auch unter Windows) ist das für Fred
eine Sache von ~5min dieses "Feature" einzubauen.
Wenn das stimmt (was ich zwar nicht beurteilen kann, aber zu bezweifeln im Moment keinen Grund habe), dann sollte es einfach gemacht werden, und länger als 5 Min. darüber zu diskutieren lohnt sich nicht. :mrgreen:

Gruß, Little John
Das stimmt so nicht. Der C Standard lässt das undefiniert:
String literals

[...]

It is unspecified whether these arrays are distinct provided their elements have the
appropriate values. If the program attempts to modify such an array, the behavior is
undefined.
Kann also jeder Compiler machen wie er will. VC ohne Optimierungen erzeugt für jede Verwendung ein neues Literal und lässt Modifizierungen zu, mit Optimierungen werden alle gleichen Literale kombiniert und sind dann readonly.

Ich werde Fred mal bei Gelegenheit darauf hinweisen. Wenn ihr aber sichergehen wollt das es nicht in Vergessenheit gerät dann schreibt besser noch einen freundlichen Post ins englische Feature Request forum. ;)

Verfasst: 18.01.2009 19:03
von remi_meier
freak hat geschrieben:Das stimmt so nicht. Der C Standard lässt das undefiniert:
String literals

[...]

It is unspecified whether these arrays are distinct provided their elements have the
appropriate values. If the program attempts to modify such an array, the behavior is
undefined.
Kann also jeder Compiler machen wie er will. VC ohne Optimierungen erzeugt für jede Verwendung ein neues Literal und lässt Modifizierungen zu, mit Optimierungen werden alle gleichen Literale kombiniert und sind dann readonly.
:lol: VC ist genau das, was man von einem C-Compiler erwarten
kann. Er implementiert den Standard bis ins Detail, sogar undefiniertes
Verhalten :lol:

Thx :allright:

Verfasst: 18.01.2009 19:28
von PMV
freak hat geschrieben:Ich werde Fred mal bei Gelegenheit darauf hinweisen. Wenn ihr aber sichergehen wollt das es nicht in Vergessenheit gerät dann schreibt besser noch einen freundlichen Post ins englische Feature Request forum. ;)
http://www.purebasic.fr/english/viewtopic.php?p=274671

MFG PMV

Verfasst: 25.01.2009 22:46
von msschlt
@cxAlex
Du hast wiederholt eine ungewöhnlichen Programmierstyl bewiesen. *g*

@remi_meier
Wieso statische Data Sektion? Zumindest eine Data Sektion muß writable sein.
Empfehle dir deine Strings in die Resourcen zu legen, die ist ReadOnly.


Es ist so wie freak sagt!
PB optimiert hier so das gleiche Strings nur einmal anlegt werden, solang er davon ausgeht das diese statisch sind.
In diesem Fall wurde der Compiler mit einer Konstellation "ausgetrickst" die so nicht berücksichtigt wurde.
Bei div. C-Kompilern kann man zumindest die String-Optimierung abschalten.

Verfasst: 25.01.2009 23:06
von cxAlex
> Du hast wiederholt eine ungewöhnlichen Programmierstyl bewiesen. *g*
Wer sagt den das ich so programmiere? Hab nur in der Lounge gesehen dass das geht und auch hier publik gemacht.
Und überhaupt, irgendwie muss man sich doch von der gewöhnlichen Masse abheben (ungewöhnlich <> schlecht) :mrgreen:

> Wieso statische Data Sektion? Zumindest eine Data Sektion muß writable sein.
Aha. Und wizo muss sie writteable sein? :?

Verfasst: 25.01.2009 23:12
von ts-soft
cxAlex hat geschrieben:Aha. Und wizo muss sie writteable sein? :?
Damit ich die Daten nicht kopieren muß, um sie zu bearbeiten :mrgreen:

Verfasst: 25.01.2009 23:17
von cxAlex
ts-soft hat geschrieben:
cxAlex hat geschrieben:Aha. Und wizo muss sie writteable sein? :?
Damit ich die Daten nicht kopieren muß, um sie zu bearbeiten :mrgreen:
Ist natürlich ein Argument :D 8)