Recherche…


Performance d'allocation

Dans Swift, la gestion de la mémoire se fait automatiquement à l'aide du comptage automatique des références. (Voir Gestion de la mémoire ) L'allocation est le processus de réservation d'un emplacement en mémoire pour un objet, et dans une compréhension rapide, ces performances nécessitent une certaine compréhension du tas et de la pile . Le tas est un emplacement de mémoire où la plupart des objets sont placés et vous pouvez le considérer comme un entrepôt de stockage. La pile, en revanche, est une pile d'appels de fonctions ayant conduit à l'exécution en cours. (Par conséquent, une trace de pile est une sorte d'impression des fonctions de la pile d'appels.)

L'allocation et la désallocation de la pile est une opération très efficace, mais en comparaison, l'allocation de tas est coûteuse. Lors de la conception pour la performance, vous devez garder cela à l'esprit.

Des classes:

class MyClass {

    let myProperty: String

}

Les classes dans Swift sont des types de référence et par conséquent plusieurs choses se produisent. Tout d'abord, l'objet réel sera alloué au tas. Toutes les références à cet objet doivent ensuite être ajoutées à la pile. Cela fait des classes un objet plus coûteux à attribuer.

Structs:

struct MyStruct {

    let myProperty: Int

}

Les structures étant des types de valeur et donc copiées lorsqu elles sont transmises, elles sont allouées sur la pile. Cela rend les structures plus efficaces que les classes, cependant, si vous avez besoin d'une notion d'identité et / ou de sémantique de référence, une structure ne peut pas vous fournir ces choses.

Avertissement sur les structures avec des chaînes et des propriétés qui sont des classes

Bien que les structs soient généralement plus sympas que les classes, vous devez faire attention aux structs avec des propriétés qui sont des classes:

struct MyStruct {

    let myProperty: MyClass

}

Ici, en raison du comptage de références et d'autres facteurs, la performance est maintenant plus similaire à une classe. De plus, si plusieurs propriétés de la structure sont une classe, l'impact sur les performances peut être encore plus négatif que si la structure était plutôt une classe.

De plus, bien que les chaînes soient des structures, elles stockent en interne leurs caractères sur le tas, et sont donc plus chères que la plupart des structures.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow