Ich habe ein Beispiel C++ - Programm auf einem 64-Bit-Linux-Rechner auf VMware Player über Host-Rechner als Windows erstellt. Das Folgende ist ein Klassencode.C++ 64-Bit-Maschine, zeigt 32 Bit-Heap-Adresse
Ich verstehe, dass auf 64-Bit-Maschine Speicheradresse in 8 Bytes dargestellt werden.
Wenn ich das Programm mit GDB ausführen, sehe ich die unten stehende Adresse:
p oOT
$1 = (operatorOverloadingTest *) 0x613c20
p &oOT
$2 = (operatorOverloadingTest **) 0x7fffffffe228
&(oOT1.age)
$7 = (int *) 0x7fffffffe210
(gdb) p &(oOT->age)
$8 = (int *) 0x613c20
Meine Frage ist, warum tut Objekt in Heap zugewiesen zeigt eine 32-Bit-Adresse Darstellung und das Objekt auf dem Stapel (oOT1) zeigt eine 64-Bit-Adressdarstellung, obwohl mein Betriebssystem 64 Bit ist? (Überprüft mit uname -a).
weil 0x613c20 = 0x0000000000613c20 - es – Anty
Offenbar führende Nullen abschneidet, der Compiler oder Laufzeit gerade passiert Heap-Speicher in der unteren 4GB lokalisieren des 64-Bit-Adressraums. –
@Anty: Und der Grund, warum es das tut, ist vermutlich, weil es viel einfacher ist zu sehen, dass "0x02000000" nicht "0x20000000" ist, als zu sehen, dass "0x0000000002000000" nicht "0x0000000020000000" ist. –