Swift Academy · Lektion

Stack vs. heap: Hvor værdier befinder sig

Se, hvordan structs ligger på stacken og klasser på heapen, samt hvilke konsekvenser det har for ydeevnen.

Lektion 1 af 412 trin

Stack vs. heap: Hvor værdier befinder sig er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.

Velkommen

Det er afgørende at forstå, hvor Swift-værdier ligger i hukommelsen — på stakken eller heapen — når du skriver effektiv og forudsigelig kode.

Stakken

Stakken er en sammenhængende hukommelsesblok, der administreres automatisk: • Lokale variabler og parametre i funktioner ligger her • Allokering er O(1) — flyt blot en peger • Frigives automatisk, når gyldighedsområdet afsluttes • Er trådlokal — hver tråd har sin egen stack

Heapen

Heapen er en delt pulje til allokeringer med lang levetid: • Objekter ligger her, når deres levetid strækker sig ud over ét gyldighedsområde • Allokering kræver, at der findes ledig hukommelse — det er dyrere • Administreres af ARC for klasser • Delt på tværs af tråde — kræver synkronisering

Strukturer ligger på stakken

```swift func compute() { var pt = CGPoint(x: 3, y: 4) // on the stack pt.x += 1 } // pt freed automatically ``` Små strukturer sendes som kopier — ingen omkostninger ved heapen.

Klasser ligger på heapen

```swift class Dog { var name: String init(name: String) { self.name = name } } var d = Dog(name: "Rex") // Dog instance on heap // 'd' is a pointer on the stack ```

Store strukturer kan bruge heapen

Store strukturer (arrays, strings og store værdityper) bruger internt COW og lager på heapen, selvom de opfører sig som værdityper: ```swift var arr = [Int](repeating: 0, count: 10_000) // The array's buffer is on the heap; 'arr' itself is a stack value ```

Indfangning i closures

Når en closure indfanger en variabel af værditype, der skal leve længere end gyldighedsområdet, placerer Swift den i en boks på heapen: ```swift var count = 0 let increment = { count += 1 } // count captured in a heap box increment() print(count) // 1 ```

Boksning af protokoleksistentialer

Lagring af små værdityper i variabler af typen `any Protocol` kan medføre allokering på heapen (eksistentiel boksning): ```swift var shape: any Shape = Circle(radius: 5) // may allocate on heap ``` Små typer (≤3 ord) lagres direkte; større typer placeres i bokse.

Måling af allokeringer

Brug skabelonen Allocations i Instruments til at se allokeringer på heapen: 1. Profilér > Allocations 2. Filtrér efter klasse eller kategori 3. Følg antallet af `alloc` og `dealloc` Et højt antal allokeringer i løkker er ofte tegn på uventet boksning.

Designmæssige konsekvenser

• Foretræk strukturer til kortlivede typer, der indeholder data — stakkens hastighed • Brug klasser, når der er brug for identitet eller delt tilstand • Undgå allokering i tætte løkker — forhåndsallokér med `reserveCapacity` • Profilér før optimering — for tidlig optimering spilder tid

Hurtigt tjek

Hvilken type hukommelse frigives automatisk, når en funktions gyldighedsområde afsluttes?

Opsummering

Vigtigste pointer: • Stak: billig, automatisk, trådlokal, værdityper • Heap: fleksibel, ARC-administreret, referencetyper • Store strukturer bruger interne heap-buffere (COW) • Closures, der indfanger variabler, placerer dem i bokse på heapen • Brug Instruments Allocations til at opdage uventet belastning af heapen Næste emne: ændring, deling og uventet aliasering.
Gratis at komme i gang

Lær Swift med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
122
Lektioner
409

Ofte stillede spørgsmål

Er lektionen “Stack vs. heap: Hvor værdier befinder sig” gratis?

Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Stack vs. heap: Hvor værdier befinder sig”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Stack vs. heap: Hvor værdier befinder sig”?

Se, hvordan structs ligger på stacken og klasser på heapen, samt hvilke konsekvenser det har for ydeevnen. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Swift Academy?

Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Stack vs. heap: Hvor værdier befinder sig”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Swift Academy-lektion?

Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Stack vs. heap: Hvor værdier befinder sig
  2. Mutation, deling og uventet aliasing
  3. Blandede værdi- og referencegrafer
  4. Design af API'er med værdisemantik
← Tilbage til Swift Academy