Swift Academy · Oppitunti

Pino ja kekomuisti: missä arvot sijaitsevat

Miten rakenteet sijaitsevat pinossa ja luokat kekomuistissa sekä millaisia suorituskykyvaikutuksia tällä on.

Oppitunti 1/412 vaihetta

Pino ja kekomuisti: missä arvot sijaitsevat on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Tervetuloa

Sen ymmärtäminen, missä Swiftin arvot sijaitsevat muistissa — pinossa vai keossa — on olennaista suorituskykyisen ja ennakoitavasti toimivan koodin kirjoittamisessa.

Pino

Pino on automaattisesti hallittu yhtenäinen muistialue: • Funktioiden paikalliset muuttujat ja parametrit sijaitsevat täällä • Varaus on O(1) — osoitinta tarvitsee vain siirtää • Muisti vapautetaan automaattisesti näkyvyysalueen päättyessä • Pino on säiekohtainen — jokaisella säikeellä on oma pinonsa

Keko

Keko on pitkäikäisiä varauksia varten jaettu muistialue: • Oliot sijaitsevat täällä, kun niiden elinkaari jatkuu yhtä näkyvyysaluetta pidemmälle • Varaus edellyttää vapaan muistin etsimistä ja on siksi kalliimpaa • Luokkien muistia hallinnoi ARC • Muisti on jaettu säikeiden kesken, joten synkronointia tarvitaan

Rakenteet sijaitsevat pinossa

```swift func compute() { var pt = CGPoint(x: 3, y: 4) // on the stack pt.x += 1 } // pt freed automatically ``` Pienet rakenteet välitetään kopioina — keolla ei tarvita muistia.

Luokat sijaitsevat keossa

```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 ```

Suuret rakenteet voivat käyttää kekoa

Suuret rakenteet, kuten taulukot, merkkijonot ja suuret arvotyypit, käyttävät sisäisesti COW-mallia ja kekomuistia, vaikka ne toimivat arvotyyppeinä: ```swift var arr = [Int](repeating: 0, count: 10_000) // The array's buffer is on the heap; 'arr' itself is a stack value ```

Muuttujien kaappaaminen sulkeumissa

Kun sulkeuma kaappaa arvotyyppisen muuttujan, jonka on säilyttävä näkyvyysalueen päättymisen jälkeen, Swift sijoittaa sen keon pakettiin: ```swift var count = 0 let increment = { count += 1 } // count captured in a heap box increment() print(count) // 1 ```

Protokollan eksistentiaalinen pakkaus

Pienten arvotyyppien tallentaminen `any Protocol` -muuttujiin voi aiheuttaa kekomuistin varaamisen (eksistentiaalinen pakkaus): ```swift var shape: any Shape = Circle(radius: 5) // may allocate on heap ``` Pienet tyypit (enintään 3 sanaa) sijoitetaan suoraan rakenteeseen; suuremmat tyypit pakataan.

Varausten mittaaminen

Käyttäkää Instrumentsin Allocations-mallia kekomuistivarausten tarkastelemiseen: 1. Profile > Allocations 2. Suodattakaa luokan tai luokan mukaan 3. Seuratkaa `alloc`- ja `dealloc`-määriä Suuret varausmäärät silmukoissa viittaavat usein odottamattomaan pakkaamiseen.

Suunnittelun vaikutukset

• Suosikaa lyhytikäisissä tietoa säilyttävissä tyypeissä rakenteita — pinon nopeuden vuoksi • Käyttäkää luokkia, kun tarvitaan identiteettiä tai jaettua tilaa • Välttäkää varaamista tiukoissa silmukoissa — varatkaa tila etukäteen `reserveCapacity`-menetelmällä • Profiloikaa ennen optimointia — ennenaikainen optimointi tuhlaa aikaa

Pikatarkistus

Minkä tyyppinen muisti vapautetaan automaattisesti funktion näkyvyysalueen päättyessä?

Kertaus

Keskeiset opit: • Pino: edullinen, automaattinen, säiekohtainen, arvotyypeille tarkoitettu • Keko: joustava, ARC:n hallinnoima, viitetyypeille tarkoitettu • Suuret rakenteet käyttävät sisäisiä kekopuskureita (COW) • Muuttujia kaappaavat sulkeumat pakkaavat ne kekoon • Käyttäkää Instrumentsin Allocations-mallia odottamattoman kekomuistin käytön havaitsemiseen Seuraavaksi: muokkaaminen, jakaminen ja odottamaton aliasointi.
Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Pino ja kekomuisti: missä arvot sijaitsevat” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Pino ja kekomuisti: missä arvot sijaitsevat”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Pino ja kekomuisti: missä arvot sijaitsevat”?

Miten rakenteet sijaitsevat pinossa ja luokat kekomuistissa sekä millaisia suorituskykyvaikutuksia tällä on. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Pino ja kekomuisti: missä arvot sijaitsevat”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Pino ja kekomuisti: missä arvot sijaitsevat
  2. Muuttaminen, jakaminen ja odottamaton aliasointi
  3. Sekalaiset arvo- ja viitegraafit
  4. Arvosemantiikkaa käyttävien API-rajapintojen suunnittelu
← Takaisin: Swift Academy