Swift Language
Prestazione
Ricerca…
Prestazioni di allocazione
In Swift, la gestione della memoria viene eseguita automaticamente utilizzando il conteggio dei riferimenti automatico. (Vedi Gestione della memoria ) L'allocazione è il processo di riservare un punto in memoria per un oggetto, e in Swift comprendere le prestazioni di tale richiede una certa comprensione dell'heap e dello stack . L'heap è una locazione di memoria in cui vengono collocati la maggior parte degli oggetti e si può pensare a un magazzino. La pila, d'altra parte, è una pila di chiamate di funzioni che hanno portato all'esecuzione corrente. (Quindi, una traccia dello stack è una sorta di stampa delle funzioni sullo stack delle chiamate).
Assegnare e deallocare dallo stack è un'operazione molto efficiente, tuttavia l'allocazione dell'heap di confronto è costosa. Quando progetti per prestazioni, dovresti tenerlo a mente.
Classi:
class MyClass {
let myProperty: String
}
Le classi in Swift sono tipi di riferimento e quindi accadono diverse cose. Innanzitutto, l'oggetto effettivo verrà assegnato all'heap. Quindi, qualsiasi riferimento a quell'oggetto deve essere aggiunto allo stack. Ciò rende le classi un oggetto più costoso per l'allocazione.
le strutture:
struct MyStruct {
let myProperty: Int
}
Poiché le strutture sono tipi di valore e quindi copiate quando vengono passate, vengono allocate nello stack. Questo rende le strutture più efficienti delle classi, tuttavia, se hai bisogno di una nozione di identità e / o di semantica di riferimento, una struttura non può fornirti quelle cose.
Avviso sulle strutture con stringhe e proprietà che sono classi
Mentre le struct sono in genere cheeper rispetto alle classi, dovresti fare attenzione alle strutture con proprietà che sono classi:
struct MyStruct {
let myProperty: MyClass
}
Qui, a causa del conteggio dei riferimenti e di altri fattori, la performance è ora più simile a una classe. Inoltre, se più di una proprietà nella struttura è una classe, l'impatto sulle prestazioni potrebbe essere anche più negativo rispetto a se la struttura fosse invece una classe.
Inoltre, mentre le stringhe sono strutture, memorizzano internamente i loro caratteri nello heap, quindi sono più costosi della maggior parte delle strutture.