Angenommen, ich bin in einer 64-Bit-Maschine kompiliert ein C-Programm mit gcc
. Ich nehme an, dass sizeof(int)
8 Bytes ist und sizeof(char)
1 Byte ist.Speicherausrichtung der Java-Klassen
Aufgrund der Speicherausrichtung, die folgenden Struktur:
struct example{
int a;
char c;
}
hat tatsächlich nicht mit einer Größe von 9 Bytes, aber 16 (zweimal sizeof(int)
), so daß sowohl seine Anfangs- und Endadressen bei Vielfachen von sein können die Wortgröße (angenommen hier 8 Bytes).
Ich habe mich gefragt, wie groß die folgende Klasse in Java 8 sein würde:
class Node {
int val;
Node left, right;
boolean flag;
}
Ich bin im Grunde nicht sicher, ob wir bei Vielfachen von 8 oder 4 Byte ausrichten würden.
Darüber hinaus ist die Größe eines Typs nicht die wahre Größe des Typs. Die Größe eines Typs umfasst mehr als die bloßen Elemente. Sie haben Methoden, Konstruktoren, Header, Membertypen mit eigenem Overhead, das 'class' Literal, ... und die Instanzen können in der Größe variieren, von null Bytes bis zu einem Register oder zwei bis zu ein paar Bytes im Stack die vollständige berechnete Größe auf dem Heap einschließlich der zusammengesetzten Instanzen, abhängig von den Laufzeitbedingungen. –