Chcę undesrtand, co jest przechowywane w stos/sterty w szybkim. Mam oszacowanie rought: Wszystko, co drukujesz i adres pamięci pojawia się nie wartości, są przechowywane w stosie, a co drukowane jako wartości, te są na stercie, w zasadzie według wartości i typów odniesienia. Czy całkowicie się mylę? Opcjonalnie, czy mógłbyś przedstawić wizualną replikację stosu/sterty?Swift stos/heap zrozumienie
Odpowiedz
Klasy (typy referencyjne) są przydzielane w stercie, typy wartości (takie jak Struct, String, Int, Bool itd.) Znajdują się w stosie. Zobacz ten temat bardziej szczegółowych odpowiedzi: Why Choose Struct Over Class?
jak Juul podano typy referencyjne są przechowywane w sterty i wartości w stos ...
Tutaj chcę dać wyjaśnienie dlaczego ...
stosu i sterty?
Stos jest używany do alokacji pamięci statycznej i Sterty do dynamicznego przydzielania pamięci, zarówno przechowywanych w pamięci RAM komputera.
Zmienne przydzielone na stosie są zapisywane bezpośrednio w pamięci, a dostęp do tej pamięci jest bardzo szybki, a jej przydział jest rozwiązywany podczas kompilacji programu. Kiedy funkcja lub metoda wywołuje inną funkcję, która z kolei wywołuje inną funkcję itp., Wykonywanie wszystkich tych funkcji pozostaje zawieszone do momentu, aż ostatnia funkcja zwróci swoją wartość. Stos jest zawsze zarezerwowany w poleceniu LIFO, ostatnio zarezerwowanym blokiem jest zawsze następny blok do uwolnienia. To sprawia, że śledzenie stosu jest naprawdę proste, a zwolnienie bloku ze stosu to nic innego jak dostosowanie jednego wskaźnika.
Zmienne przydzielone na stercie mają ich pamięć przydzielona w czasie wykonywania i dostępu do tej pamięci jest nieco wolniejszy, ale wielkość sterty jest ograniczona jedynie wielkością pamięci wirtualnej. Element sterty nie ma wzajemnych zależności i zawsze można uzyskać do niego dostęp w dowolnej chwili. Możesz przydzielić blok w dowolnym momencie i zwolnić go w dowolnym momencie. To sprawia, że o wiele bardziej skomplikowane jest śledzenie, które części sterty są przydzielane lub darmowe w danym momencie.
- 1. Swift: Zrozumienie // MARK
- 2. Zrozumienie Swift Alamofire completionHandler
- 3. Zrozumienie składni selektora języka Swift 2.2 - #selector()
- 4. Zrozumienie removeRange (_ :) dokumentację
- 5. Zrozumienie MsgWaitForMultipleObjects
- 6. fft zrozumienie
- 7. Zrozumienie gwintowania
- 8. Zrozumienie UIGraphicsGetCurrentContext()
- 9. Zrozumienie `getArgs`
- 10. Zrozumienie Pryszcz
- 11. Zrozumienie dispatch_async
- 12. Zrozumienie wielowątkowości
- 13. Zrozumienie gi.repository
- 14. Zrozumienie goroutines
- 15. Zrozumienie WCF
- 16. zrozumienie Blokowanie pomocy?
- 17. Zrozumienie wątku/BeginInvoke? [Początkujący]
- 18. Zrozumienie ścieżki obciążenia Rubiego
- 19. Zrozumienie najprostszy llvm IR
- 20. zrozumienie php curl_multi_exec
- 21. Ember - Zrozumienie odwrotnych relacji
- 22. Zrozumienie dyspozytor Kolejka
- 23. Zrozumienie architektury kontaktów Androida
- 24. Zrozumienie kontekstu nawiasów klamrowych '{}'
- 25. Zrozumienie C rozmontowanego połączenia
- 26. Zrozumienie podsumowanie zapytania wewnętrznej
- 27. zrozumienie mangusta [Schema.Types.Mixed]
- 28. Zrozumienie fizycznego planu iskrzenia
- 29. zrozumienie użycia ImageView Matrix
- 30. XCode - zrozumienie instrumentu alokacji
Ta prezentacja wyjaśnia niektóre zastosowania Swift w stosie i stosie: https://realm.io/news/andy-matuschak-controlling-complexity/. Krótko mówiąc, nie można założyć, że wartość lub referencja znajdzie się na stercie lub stosie, jak można w C. –
Zaskoczony, że nikt jeszcze nie odpowiedział, czy jest to jakiś tajny język znany tylko po tobie zapłacić coś za jabłko? – Ahmed