サーチ…


割り当てパフォーマンス

Swiftでは、Automatic Reference Countingを使用して自動的にメモリ管理が行われます。 ( メモリ管理を参照してください)割り当ては、オブジェクトのメモリ内にスポットを予約するプロセスであり、スウィフトでは、そのパフォーマンスを理解するために、 ヒープスタックの理解が必要です。ヒープは、ほとんどのオブジェクトが配置されるメモリの場所であり、ストレージの格納域と考えることができます。一方、スタックは、現在の実行につながった関数の呼び出しスタックです。 (したがって、スタックトレースは、呼び出しスタック上の関数の一種の出力です。)

スタックの割り当てと割り当て解除は非常に効率的ですが、ヒープ割り当てはコストがかかります。パフォーマンスを考慮して設計するときは、この点を念頭に置いてください。

クラス:

class MyClass {

    let myProperty: String

}

Swiftのクラスは参照型であるため、いくつかのことが起こります。まず、実際のオブジェクトがヒープに割り当てられます。次に、そのオブジェクトへの参照をスタックに追加する必要があります。これにより、クラスをより高価なオブジェクトに割り当てることができます。

構造:

struct MyStruct {

    let myProperty: Int

}

structは値型であり、渡されるときにコピーされるため、スタックに割り当てられます。これは、構造体をクラスよりも効率的にします。しかし、あなたがアイデンティティや参照セマンティクスの概念を必要とする場合、構造体はそれらを提供できません。

文字列とクラスであるプロパティを持つ構造体に関する警告

構造体は一般にクラスよりも安価ですが、クラスであるプロパティを持つ構造体には注意が必要です。

struct MyStruct {

    let myProperty: MyClass

}

ここでは、参照カウントなどの要因により、パフォーマンスがクラスに似ています。さらに、構造体の複数のプロパティがクラスである場合、構造体がクラスである場合よりもパフォーマンスの影響がさらに大きくなる可能性があります。

また、Stringsは構造体ですが、内部的には文字をヒープに格納するため、ほとんどの構造体よりも高価です。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow