Sie möchten erfahren, wie eine Instanz einer Klasse im Hintergrund erstellt wird. Wenn diese Aussage
%Vor%wird ausgewertet. Was wird im Hintergrund passieren? Meine folgenden Aussagen sind korrekt oder nicht (für 32-Bit-Betriebssystem)?
myClass
; int i
; string str
; Der tatsächliche Wert von str
wird an einem anderen Ort gespeichert (wo?) MyStruct mystruct
verwendet (weil MyStruct 8 Bytes ist); B b
-Objekts verwendet; Speicher für b-Objekt wird an anderer Stelle zugewiesen, wenn es instanziiert wird; ArrayList myList
verwendet; Der tatsächliche Speicherplatz für ArrayList myList
wird an anderer Stelle zugewiesen und hier als myList
; Sie haben die Grundidee vor Ort. Die tatsächlichen Einzelheiten, abgesehen von dem, was Sie einschließen, sind implementierungsspezifisch. Für ein paar Ihrer Punkte:
3) Die tatsächliche Zeichenfolge wird normalerweise wie jede andere Klasse in ihrem eigenen Speicherbereich gespeichert. Da Sie in diesem Fall jedoch ein Zeichenfolgenliteral verwenden, befindet es sich höchstwahrscheinlich im String-internen Pool, der (glaube ich) im Heap des großen Objekts gespeichert ist. Weitere Informationen zum String-Interning finden Sie unter String.Intern . (Wenn Sie die Zeichenfolge im Handumdrehen zugewiesen haben, wird die Zeichenfolge anstelle eines Literals im normalen verwalteten Heap Ihrer Anwendung gespeichert.)
Das ist es.
Der String wird in der String-Tabelle gespeichert und nicht als frei fließendes Objekt im Heap. Es ist wichtig zu beachten, dass nur eine Instanz dieser Zeichenfolge instanziiert wird, unabhängig von der Anzahl der Instanzen von MyClass
, die instanziiert werden.
7.weitere 4 oder 8 Bytes aus dem obigen Speicherplatz werden für das Objekt verwendet Metadaten
Es wäre 8 Bytes. 4 für den Syncblock und 4 für Typinformationen.
Weitere Informationen zum Thema finden Sie in dieser Frage .
>