Swift Language Prestazioni di allocazione


Esempio

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.