|
Ich weiß nicht ob du programmierst oder schon mal programmiert hast, aber für solche Sachen musst du verstehen wie Programme und ihre Speicherverwaltung funktioniert.
Nehmen wir mal als Beispiel den Chat. Der Chat besteht aus entweder (1)einem großen String, (2)einem Array aus Strings oder (3)einer Liste von Strings. (Oder es sind Kombinierte Datentypen die einen string und noch weitere Informationen enthalten).
Nun zum erläutern der Speicherverteilung der einzelnen möglichkeiten, mit der Annahme dass ein C-String als Char* verwendet wird
1. Du wirst einen gigantischen speicherblock finden, in dem der komplette Text steht. Sobald etwas zum text hinzukommt wird der alte string block entfernt und ein neuer entsprechend größerer an einer anderen Stelle/Adresse erzeugt. Die Idee ist den Zeiger auf diesen Speicherblock zu finden (Steht an einer anderen, Statischen Adresse) und durch den die Adresse des Strings zu finden
2. Hier muss man nun unterscheiden, gibt es immer eine statische Anzahl an chat Nachrichten die gespeichert werden, so hat man einen Statischen Array einer festen Größe, den im Auge zu behalten sollte relativ easy sein. Dieser ist ein Speicherblock an einer festen Adresse X und enthält mehrere Zeiger auf die einzelnen nachrichten. Also bei einem 4 Elementigen Array wäre an der Adresse X der wert der Adresse zur ersten Nachricht, an der Adresse X+SizeOf(Pointer) der zur zweiten etc.
Ist es ein Dynamischer Array, so haben wir das selbe problem wie bei dem Großen string, kommt eine neue Chat Nachricht hinzu, so wird der Speicherblock aufgelöst und ein neuer mit der Größe des alten +SizeOf(Pointer) an einer anderen stelle hinzugefügt. Da heißt es wieder über den Zeiger zu diesem Array an anderer stelle zugreifen.
3. Bei einer Liste handelt es sich um mehrere Structs mit 1. einem Pointer zum String, 2. Einen Pointer zum nächsten Element. Du wirst irgendwo im Speicher dann eine Adresse auf das erste Element finden, an der Adresse hast du dann einen Block der 2*SizeOf(Pointer) groß ist und 2 Adressen enthält. Eine dieser Adressen führt zu dem String der chat Nachricht, die andere zum nächsten Element. Damit musst du dich entlanghangeln, das element der kette, dessen Zeiger auf null zeigt ist das letzte Element der liste.
Je Komplexer die Datentypen sind (z.B. eine Klasse für den String) durch desto mehr Informationen musst du dich durcharbeiten um an diese Adressen zu kommen.
Generell sind Speichertechnisch strings schon etwas komplexer als andere Datentypen (z.B. Integer) da Strings 1. Je nach Programmiersprache anders sind, 2. Statisch als auch Dynamisch sein können (bei dynamischen hast du einen Zeiger als Referenz)
|