Autor Beitrag
VampireSilence
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109
Erhaltene Danke: 5


C# (VS 2008 Express), PHP/MySQL, Windows XP
BeitragVerfasst: Sa 03.09.11 17:21 
Hallo Zusammen,

es gibt da eine Frage, die mich schon länger beschäftigt. Und zwar ist es ja so, dass jeder Datentyp eine bestimmte Reservierung im Speicher erhält (so weit richtig ?), ein Char bekommt ein Byte, ein Short bekommt 2 Byte, ein Int bekommt 4 Byte, usw.. Aber wieviel wird für einen String reserviert ? Und wieviele Zeichen könnte ich maximal darin speichern ?

Das ganze hat keinen konkreten Hintergrund, sondern soll nur mein Wissen über die theorethischen Hintergründe etwas aufpolieren.

mfg
- VampireSilence

Für diesen Beitrag haben gedankt: storestore
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 03.09.11 17:37 
Es gibt da einiges mit Stack, Heap, Padding etc. zu beachten, aber um auf deine Kernfrage zu antworten: Strings sind immutable, besitzen also eine feste Länge, die beim Instanzieren bekannt ist und deswegen entsprechend viel Speicher alloziert werden kann. Fügst du beispielsweise einen anderen String an den String an, wird eine neue Instanz mit der summierten Länge erzeugt. Da diese Länge ein Int32 ist, kann ein String theoretisch 2^31-1 Zeichen enthalten.

_________________
>λ=

Für diesen Beitrag haben gedankt: storestore, VampireSilence
VampireSilence Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109
Erhaltene Danke: 5


C# (VS 2008 Express), PHP/MySQL, Windows XP
BeitragVerfasst: Sa 03.09.11 17:46 
Danke, das hat mir sehr geholfen! Und die diversen Stichwörter, die mir noch nichts sagen, werde ich jetzt mal versuchen selbstständig zu ergooglen. Ansonsten melde ich mich wieder hier. ;)

mfg
- VampireSilence

Für diesen Beitrag haben gedankt: storestore
pdelvo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 55
Erhaltene Danke: 11



BeitragVerfasst: Sa 03.09.11 17:59 
Und man sollte noch erwähnen, das ein string ein Referenztyp, und kein Wertetyp ist. (auch wenn er immutable ist)

Für diesen Beitrag haben gedankt: storestore
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 03.09.11 22:17 
Und ein 'char' in der .NET-Welt ist immer 2 Byte groß (d.h. Unicode-fähig), s.a. Vergleich der Datentypen in verschiedenen Sprachen, d.h. ein String belegt immer (2*Length) Bytes.

Für diesen Beitrag haben gedankt: storestore
pdelvo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 55
Erhaltene Danke: 11



BeitragVerfasst: Sa 03.09.11 23:03 
Dann kommen da noch Verwalltungsdinge hinzu. zB der pointer auf den string, und die längenangabe. Ein string ist immer mindestens 20 bytes groß.

das hört sich jetzt ziemlich inperformant an, ABER .net besitzt intern einen String pool. Wenn man zweimal die selbezeichenfolge in zwei Objekte packt, verweisen sie intern auf die selben Daten. Da strings in .net immutable sind, ist das auch kein Problem.

Strings sind so ziemlich das komplizierteste was es in .net gibt

Sehr interessant ist dazu dieser Artikel: csharpindepth.com/Ar...General/Strings.aspx

Für diesen Beitrag haben gedankt: storestore
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 04.09.11 00:53 
user profile iconpdelvo hat folgendes geschrieben Zum zitierten Posting springen:
Wenn man zweimal die selbezeichenfolge in zwei Objekte packt, verweisen sie intern auf die selben Daten. Da strings in .net immutable sind, ist das auch kein Problem.
Nope, das würde einen riesigen Verwaltungsaufwand erzeugen. Wie Jon Skeet schon richtig erwähnt, werden nur String-Literale automatisch interned.

_________________
>λ=