Adressoperator
-
hab hier nen simplen Code der Variablen verschiedener Typen erstellt und deren Speicheradresse ausgibt...
#include <iostream.h> int main() { unsigned short shortVar = 1; unsigned long longVar = 1; long sVar = 1; bool bVar = true; double dVar = 1; int cVar = 1; cout << "shortVar" << shortVar; cout << "\t"; cout << &shortVar << "\tByte: " << sizeof(shortVar) << endl; cout << "longVar " << longVar; cout << "\t"; cout << &longVar << "\tByte: " << sizeof(longVar) << endl; cout << "sVar\t" << sVar; cout << "\t"; cout << &sVar << "\tByte: " << sizeof(sVar) << endl; cout << "bVar\t" << bVar; cout << "\t"; cout << &bVar << "\tByte: " << sizeof(bVar) << endl; cout << "dVar\t" << dVar; cout << "\t"; cout << &dVar << "\tByte: " << sizeof(dVar) << endl; cout << "cVar\t" << cVar; cout << "\t"; cout << &cVar << "\tByte: " << sizeof(cVar) << endl; cin.get(); return 0; }
Ausgabe:
shortVar_1_______0012FF8A________Byte: 2
longVar__1_______0012FF84________Byte: 4
sVar_____1_______0012FF80________Byte: 4
bVar_____1_______0012FF7F________Byte: 1
dVar_____1_______0012FF74________Byte: 8
cVar_____1_______0012FF70________Byte: 4wenn ich die erste Adresse von shortVar - die 2 von longVar also 0012FF8A - 0012FF84 = 6 -> 6Byte
Frage: müssten da nicht eigenlich 2 Byte kommen?bei den anderen stimmt auch nicht ganz... oder wo liegt mein Denkfehler?
0012FF8A - 0012FF84 = 6
0012FF84 - 0012FF80 = 4
0012FF80 - 0012FF7F = 1
0012FF7F - 0012FF74 = 11
0012FF74 - 0012FF70 = 4und wie bekomme ich die letzte Speicheradresse von Cvar(also der letzten Variable) heraus 0012FF70 - 4Byte -> 12FF6C
kann ich mir das auch irgendwie ausgeben lassen?insane
PS: wenn jemand ne Seite/Buch kennt wo beschrieben wird wie der Ram aufgeteilt wird .. aslo Namensbereich, Heap , Register, Codebereich, Stack.. und was/wo da genau passiert (einfach alles detailliert erklärt wird).. nur her mit dem link / Büchervorschlag
-
Hallo,
ich glaube dein Denkfehler liegt darin, dass du davon ausgehst die Variablen
wuerden im Speicher hintereinander liegen, was aber nicht zwingend der Fall
sein muss. Die Variablen liegen innerhalb des deinem Programm zugesicherten
Speicherbereiches, wo genau sie dort liegen ist unbestimmt.Wenn du allerdings ein 'struct' hast, liegen die Variablen hintereinander im
Speicher, du kannst es ja mal ausprobieren.mfg
v R
-
Bei einem struct oder einer Klasse ist das auch nciht zwingend der Fall, kommt auf die Kompilereinstellung bezüglich packing an!
-
Sprichst du die padding-Bytes an? Werden die nicht nur ans Ende einer Struktur
angehaengt?mfg
v R
-
..und da hab ich ne halbe Stunde gerechnet und überlegt
danke euch
Gruß insane
-
virtuell Realisticer schrieb:
Sprichst du die padding-Bytes an? Werden die nicht nur ans Ende einer Struktur
angehaengt?Genau die meine ich. Nein, die werden nicht nur an das Ende rangehängt.
struct { WORD w; char c; int i; };
Wenn du ein packing von 4 Bytes hast, ist nach c ein paddingbyte dran.
-
Du kannst nur bei Arrays davon ausgehen, dass die Variablen hintereinander abgelegt sind. Genauer gesagt, in einem T[] Array liegen sie sizeof(T) Bytes auseinander.