Wie speichert Swift Arrays von Strukturen?

9

Könntest du einem C-Programmierer genau erklären, was unter der Haube passiert, wenn du in Swift so etwas machst:

%Vor%

Insbesondere, was genau ist das Speicherlayout? Was wird vom Stack zugewiesen und was wird vom Heap zugewiesen? Wie viele separate Speicherblöcke teilen wir hier zu?

Mein rate ist, dass etwas in dieser Richtung passiert:

  • x1 und x2 sind Zeiger auf einen zusammenhängenden Speicherblock, der die Größe des Arrays (1000) enthält, gefolgt von 2000 ganzen Zahlen (Speichern von x1 [0] .a, x1 [0] .b, x1 [1 ] .a, ... in dieser Reihenfolge); Der Speicherblock wird vom Heapspeicher zugewiesen.

  • y1 und y2 sind Zeiger auf einen zusammenhängenden Speicherblock, der die Größe des Arrays enthält (1000), gefolgt von 1000 Zeigern (Speichern eines Verweises auf Objekte y1 [0], y1 [1], ... ); jeder dieser Punkte zeigt auf einen separaten Speicherblock, der eine Instanz des Objekts Y darstellt, und diese Speicherblöcke enthalten Referenzzähler + Felder a und b; Jedes Objekt Y wird separat vom Heap zugeordnet.

Ist das etwas, was in Apples aktueller Implementierung von Swift tatsächlich passiert?

Gibt es im resultierenden Maschinencode Unterschiede zwischen der Speicherung von x1 und x2 oder dem Zugriff darauf? Was ist zwischen y1 und y2?

    
Jukka Suomela 04.06.2014, 12:05
quelle

1 Antwort

3

Es ist nicht spezifiziert. Sie können den kompilierten Code zerlegen, aber das ist genau das, was er zur Zeit macht und er kann sich jederzeit ohne vorherige Ankündigung ändern.

Ich verstehe den Wunsch eines C-Programmierers, herauszufinden, was unter der Haube passiert. Aber Sie sollten sich wirklich nicht wirklich kümmern. Es ist wie wenn C herauskam und Programmierer, die in der Assembly arbeiten, wollten genau wissen, an welcher physischen Speicheradresse eine Struktur gespeichert wurde oder welche lokalen Variablen den CPU-Registern und welche dem Stack-Frame zugeordnet wurden. In sehr frühen Compilern war das etwas, was man eigentlich wissen konnte, aber das sollte einem wirklich egal sein. Nicht einmal, wenn du denkst, dass es einen Unterschied macht.

    
Analog File 05.06.2014 09:10
quelle

Tags und Links