elemtvariablen in binarys speichern
-
lookias schrieb:
ah okay danke
kannst mir das mal erklaehren
mich wurmt die frage was passiert wenn man sone speicherung fuer ne andre klasse verwendet
oder allgemein woher weiss das programm ueberhaupt wie es die daten da in die elementvariablen holt
mfg lookias
?? möchtest du die speicherbereiche erklärt haben, also stack, heap, register?
oder meinst du das, dass durch das instanziieren ein objekt der klasse erstellt wird?in dem augentblick, wo du eine instanz der klasse in der main erstellst, wird ein objekt angelegt. entweder im stack oder im heap.
hume sikkins sagte dazu mal, aus rohem speicher lebbare masse gemacht
-
na wenn man die datei speichert dann werden doch alle zugehoerigen daten aus den elementvariablen in die datei gespeichert
aber nach welchem prinzip funktioniert das?
vlt nach reinfolge der deklaration also
int itsWeight; long itsNumberDaysAlive;
-
mir ist nicht ganz klar, was du mit "datei" meinst..
vielleicht mal aus der bibliothek ein schon altes buch leihen: reiner backer - programmiersprache assembler, der hat gut beschrieben, wie der quelltext zum .obj und dann zur ausführbaren datei gelinkt wird.
im grunde google mal nach maschinensprache... und schau dir die begriffe compiler und linker mit aufgabenbereich an..oder wolltest du nicht so "tief" runter?
-
vlt nach reinfolge der deklaration also
ja
-
Hier ist write (und auf der selben Seite auch read) erklärt.
Mitfout.write((char*) &Bear,sizeof Bear);
schreibst du also 8 Bytes (bei mir) von der Addresse von Bear angefangen. Hast du erwartet, dass in der Datei 50 und 100 als "lesbare" Zahlen stehen. Sie werden aber binär in die Datei geschrieben. Wenn du 50 in einer Textdatei lesen kannst, ist das etwas anderes als der Wert 50 in einer int Variable!
(Hilft dir das nun weiter?)
-
jo
dass man nicht 50 und 100 erwarten kann ja
dass man das nach reihenfolge der deklaration speichert wars
also ist sizeoff bear die summe der laengen der bytes der variablen der klasse bear?
-
ja aber die compiler richten die einzelnen variablen meistens an wortgrenzen aus so das z.B.
int i; // 4 bytes
char c; // 1 bytez.B. 8 byte ergeben. sizeof gibt dann aber auch 8 zurück.
-
weil int den groessten speicher alociert?
also waers long int dann waerens hier 16 byte ja?
-
long ist auf 32-bit systemen das gleiche wie int. also 4 bytes.
-
ok aber nach dem system oder wie?